iOS Facebook SDK 在撤销应用权限后崩溃应用

Posted

技术标签:

【中文标题】iOS Facebook SDK 在撤销应用权限后崩溃应用【英文标题】:iOS Facebook SDK crashes app after revoking app permissions 【发布时间】:2016-04-13 13:20:38 【问题描述】:

我在使用 Facebook SDK 时遇到问题。在我的应用中,我可以通过 Facebook Graph Request 从用户的 Facebook 帐户中删除该应用:

        NSString *graphpath = [NSString stringWithFormat:@"/%@/permissions", [FBSDKAccessToken currentAccessToken].userID];
    [[[FBSDKGraphRequest alloc] initWithGraphPath:graphPath parameters:nil HTTPMethod:@"DELETE"]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) 
         if (!error) 
             NSLog(@"Facebook removed");
          else 
             NSLog(@"Facebook error: %@", error);
         
     ];

一切正常,但如果我尝试在 FBSDKLoginManager 上使用 logInWithReadPermissions 再次登录,Safari 出现,我单击“继续”以授权应用程序并崩溃并出现错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[3]'

当我再次启动应用程序后尝试登录时,一切正常。

你有什么线索,这可能是什么原因?

更新:

异常发生在 FBSDKCoreKit 文件之一中,即 FBSDKTimeSpentData.m,在第 149-155 行,我们有:

NSDictionary *timeSpentData =
  @
    FBSDKTimeSpentPersistKeySessionSecondsSpent : @(_secondsSpentInCurrentSession),
    FBSDKTimeSpentPersistKeySessionNumInterruptions : @(_numInterruptionsInCurrentSession),
    FBSDKTimeSpentPersistKeyLastSuspendTime : @(now),
    FBSDKTimeSpentPersistKeySessionID : _sessionID,
    ;

_sessionID 为零 该变量在

中初始化
- (void)instanceRestore:(BOOL)calledFromActivateApp

方法,可以在app中调用

[FBSDKAppEvents activateApp]

然而在 instanceRestore: 方法中有一个条件

if (!_isCurrentlyLoaded) 
//

未满足,因此未设置_sessionID。

【问题讨论】:

在xcode中启用异常断点,看看异常发生时它在哪里命中。 异常发生在 FBSDKCoreKit 文件之一中,即 FBSDKTimeSpentData.m,在第 149-155 行我们有: NSDictionary *timeSpentData = @ FBSDKTimeSpentPersistKeySessionSecondsSpent : @(_secondsSpentInCurrentSession), FBSDKTimeSpentPersistKeySessionNumInterruptions : @(_numInterruptionsInCurrentSession), FBSDKTimeSpentPersistKeyLastSuspendTime : @(now), FBSDKTimeSpentPersistKeySessionID : _sessionID, ; _sessionID 为零 异常表示,一个 nill 值被插入到字典中。除非您发布相关代码,否则我们无能为力。请不要在 commnets 中发布代码。使用所有详细信息更新您的问题。 对不起。我已经更新了我的帖子:) 你能查一下,看看 sessionID 是在哪里初始化并赋值的吗? 【参考方案1】:

Facebook ios 库中存在错误。请更新 Facebook SDK 库。在 FBSDKLoginKit (4.13.1) 中修复了这个错误。

【讨论】:

以上是关于iOS Facebook SDK 在撤销应用权限后崩溃应用的主要内容,如果未能解决你的问题,请参考以下文章

Facebook API SDK撤销访问权限

读取权限后直接请求发布权限 - 适用于 iOS 6 的 Facebook SDK

更改权限后无法在 Cordova iOS 上使用 Facebook SDK 登录

使用 SDK 3.5 在 iOS 上连接 Facebook

iOS Facebook SDK - 检查权限

iOS Facebook SDK 权限未经审查