我正在为不同目的开发一个库,但我无法理解 FacebookSDK 的问题。我已经在我的库中封装了所有 Facebook SSO 登录过程,它完美地集成在我正在开发的应用程序中,少了一个与线程相关的小细节。如 Facebook 开发者页面中的 iOS SDK 教程所示,我必须调用我的应用程序 AppDelegate 中的 appDidBecomeActive 方法中的“handleDidBecomeActive”方法,但检查 Facebook 中打开的会话的一些内容,以便重定向(或不重定向)到 Facebook Native iOS 应用程序、Safari 或其他:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if(//Notice that I can reveal code here, but checks if the session in Facebook is
opened){
[FBSession.activeSession handleDidBecomeActive];
}
}
考虑到我对这个库的目标,并将登录过程的其余部分封装在我的库中,我通过调用封装的方法封装了这些行:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
[[MyLibrarySingleton sharedInstance] handleDidBecomeActive];
}
显然,该方法执行与第一个代码块中所示相同的 Facebook 会话检查和 Facebook 会话 handleDidBecomeActive 调用。出乎意料的是,第一种方法与我的库的其余部分完美配合,并集成在应用程序中。但是第二种方式(封装在我的库中)使 FacebookSDK 在内部检查您是否只能从一个线程访问 FBSession 对象的方法中崩溃(这意味着,似乎封装的方法会抛出与当前线程不同的线程,即与创建了 FBSession 对象并能正常工作的相同)。我不会在流程中抛出任何新线程,只是更改第一个代码块中的代码,将其插入第二个代码块中显示的方法中。有任何想法吗??
谢谢!