SDK 3.1:如何判断SDK是否使用iOS6账号?

2024-03-08

如果我在 iOS6 中设置了 Facebook 帐户,但用户已将其关闭,则 SDK 只会向我提供 FBSessionStateClosedLoginFailed 状态。由此,我无法判断用户是否在 iOS 中关闭了我们的服务(情况 1),或者没有在 iOS 中设置帐户并拒绝了 FB 应用程序或 Web 应用程序的许可(情况 2)。

在这两种情况下,我需要呈现的错误消息有很大不同。在第一种情况下,我们需要告诉用户如何重新打开我们的电源,但在情况 2 中,这些说明会让某些人感到困惑。

我尝试使用 iOS 帐户框架,但如果我关闭,我会被告知没有 Facebook 帐户,即使有。如果我成功进行了身份验证,我还尝试写下帐户标识符,但是如果我们关闭,accountWithIdentifier 也会失败。

有人知道有什么方法可以查明我们的拒绝是来自 iOS 还是 FB 本身吗?


SDK 的一般策略是,如果某些操作失败,来自操作系统的底层错误信息将向上冒泡到应用程序。 (当然,并非所有故障案例都以操作系统 API 失败开始。)此策略的原因是支持更精确的错误处理和日志记录方案,如您所描述的那样。顺便说一句,如果您发现 SDK 中的某个地方不遵循此模式,则这是一个错误,请报告它。

在这种情况下,FBSession 将 NSError 对象传递给您的处理程序,并将 userInfo 中的 FBErrorInnerErrorKey 值设置为操作系统返回的错误对象。为了向用户提供精确的错误消息,您可以在 FBSessionStateClosedLoginFailed 案例中使用如下代码片段:

if (error) {
    NSError *innerError = error.userInfo[FBErrorInnerErrorKey];
    if ([innerError.domain isEqualToString:ACErrorDomain] &&
        innerError.code == ACErrorPermissionDenied) {
        NSLog(@"User dissallowed permissions via iOS 6.0 integration");
    }
}

希望这可以帮助!

* 更新 *刚刚在设备上尝试了一下,发现了两个错误;一个在 iOS 6.0 中,另一个在 SDK 中。 iOS 6.0 的 bug 是,当开关关闭时,操作系统不会传递任何 NSError 对象,因此不存在内部错误。因此,上面的一般解决方案不适用于所讨论的具体情况。第二个错误确实为您提供了暂时的使用 SDK 3.1.1 解决此问题。

SDK 3.1.1 中的错误是我们将 error.userInfo[FBErrorLoginFailedReason] 设置为 FBErrorLoginFailedReason 的值。如果内部错误为 NIL,您可以检查此原因值以确定应用程序的滑块已设置为关闭。然而,当 SDK 中修复了此错误后,针对此问题的代码测试将会中断,因为我们会将原因设置为与 iOS 6 相关的更符合逻辑的原因。这是在未来版本中需要注意的问题。您的应用程序(如果您决定依赖此值)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDK 3.1:如何判断SDK是否使用iOS6账号? 的相关文章

随机推荐

  • 通过配置强制在 WCF 客户端 C# 中使用 tls 1.0

    我们有一个 Web 应用程序 其中有一个使用 WCF 实现的客户端 该客户端使用 SSL LVL3 与外部服务进行握手 原来该服务只是禁用了SSL LVL3 所以我们需要将其更改为TLS 1 0 有一种方法可以在 C 中强制使用 TLS 安
  • 为什么 `myfloat in myset` 变得超级慢?

    当我重新插入相同的float值进入我的设置几次 x in s本来应该花费恒定时间的检查变得非常慢 为什么 定时输出x in s 0 06 microseconds 0 09 microseconds 0 16 microseconds 0
  • 在 React Form 中更新 props 变化的状态

    我在使用 React 表单和正确管理状态时遇到问题 我在表单 模态 中有一个时间输入字段 初始值设置为状态变量getInitialState 并从父组件传入 这本身就很好用 当我想通过父组件更新默认的 start time 值时 问题就出现
  • sed — 连接一系列选定的行

    我是初学者sed 我知道可以将一个命令 或一组命令 应用于一定范围的行 如下所示 sed begin end some command where begin 是一个正则表达式 指定范围的起始行并且 end 是一个正则表达式 指定范围的结束
  • 如何要求电子邮件的收件人在其回复下方添加“-- 在本行上方回复 --” 标签?

    我想解析传入的电子邮件 这是对我发送的电子邮件的回复 的实际消息 没有 原始消息 部分 签名等 为了实现这一点 我想在回复中包含一个分隔符 例如 在本行上方回复 就像我读过的许多帖子中建议的那样 但是 当用户回复我的一封电子邮件时 如何要求
  • .NET 部署 Office 2003 可再发行主互操作程序集 (o2003pia.msi)

    有没有人真正成功地为 o2003 msi 创建先决条件 有一个lot很多人问这个问题 但我找不到真正成功的人 我发现一些极其复杂的解决方案 您需要完成可能提供也可能不提供源的 cpp 文件 我什至尝试遵守其中之一 但在目标计算机上出现配置错
  • 如何将事件分发到(Wildfly)集群中的所有节点?

    当我的进程中运行时间较长的进程的状态时 我想通知集群中的所有节点JavaEE 7WebApp 发生变化 因此每个节点都可以通过 WebSocket 依次通知其客户端该变化 我正在集群环境中使用 Wildfly 10 What JavaEE
  • 使用 JSF 暂时抑制 beanvalidation

    我有一个用户类 其中包含电子邮件地址和密码字段 NotNull Size min 6 Pattern flags Pattern Flag CASE INSENSITIVE regexp private String password nu
  • jquery .animate 不同的速度

    我正在 Jquery 中使用 animate 函数 我有一个使用 marginLeft 滑动的 div 但我也需要它淡入 但我需要它比 marginLeft 效果慢 对于 animate 我似乎只能应用一个速度参数
  • 在reactjs材料ui进度条中显示百分比数字

    I use 线性确定 https material ui com demos progress 我想显示完成了多少进度 就像下图一样 我不认为 Material UI 提供进度条 如上图所示 但是 您可以使用 React Bootstrap
  • 如何将表标记为只读?

    我正在处理 django 站点的迁移 我想将除 django session 表之外的所有表设为只读 我怎样才能做到这一点 REVOKE INSERT UPDATE DELETE TRUNCATE ON ALL TABLES IN SCHE
  • MVC5 Ajax.BeginForm刷新整个页面

    为什么表单发布没有通过 ajax 发生 而是重新加载到新页面 我的 js 包括 我的剃须刀观点 div using Ajax BeginForm Login null new AjaxOptions div
  • 在主程序之前在 lambda 中加载 S3 文件

    我正在编写一个 lambda 函数 需要加载存储在 S3 中的密钥 它不会经常改变 所以我不想每次调用 lambda 函数时都获取它 所以我想在容器旋转时加载它一次 然后在 lambda 容器的生命周期内保留该值 但是 由于异步方法 get
  • haproxy:获取主机名

    我正在尝试获取请求者主机 IP 因为它涉及 haproxy 节点 我的 haproxy 配置如下 frontend www http bind 9000 http request redirect location https fi 914
  • 不知道如何构建任务“路线”

    我无法执行rake routes即使routes rb文件为空 这是输出 rake routes rake aborted Don t know how to build task routes See the list of availa
  • Linux shell:使用 grep 和 fzf 交互式模糊搜索文件中的内容

    我想编写一个 shell 脚本 在特定目录 例如我的 config 文件夹 中的所有文件中搜索模式 使用 grep 我写了以下内容 grep Ril
  • Zend-framework DB:OR 代替 AND 运算符

    有这样的 zend 查询 select this gt table gt select gt where title LIKE searchWord gt where description LIKE searchWord gt where
  • Android Marshmallow (6.0) 上的 vibrate_when_ringing

    在我的代码中我有 Settings System putInt this getContentResolver vibrate when ringing isVibrateWhenRinging 1 0 使用以下权限
  • 为什么 Bootstrap 导航栏总是折叠的? [复制]

    这个问题在这里已经有答案了 我更新到了 ng bootstrap 的 v1 0 beta 现在导航栏总是折叠的 当我单击汉堡包来切换菜单时 它会打开 但垂直而不是水平显示内容 我已经包含了下面的导航代码 和以前一样 此时我无法弄清楚问题是否
  • SDK 3.1:如何判断SDK是否使用iOS6账号?

    如果我在 iOS6 中设置了 Facebook 帐户 但用户已将其关闭 则 SDK 只会向我提供 FBSessionStateClosedLoginFailed 状态 由此 我无法判断用户是否在 iOS 中关闭了我们的服务 情况 1 或者没