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 在撤销应用权限后崩溃应用的主要内容,如果未能解决你的问题,请参考以下文章
读取权限后直接请求发布权限 - 适用于 iOS 6 的 Facebook SDK