さまざまな目的でライブラリを開発していますが、理解できない FacebookSDK に問題があります。すべての Facebook SSO ログイン プロセスをライブラリ内にカプセル化しました。これは、作業中のアプリに完全に統合されて動作し、スレッドに関連する小さな詳細は 1 つもありません。Facebook 開発者のページの iOS SDK チュートリアルに示されているように、私のアプリのAppDelegateのappDidBecomeActiveメソッドの「handleDidBecomeActive」メソッドですが、FacebookのネイティブiOSアプリ、Safariなどにリダイレクトする(またはしない)ために、Facebookで開いているセッションに関するいくつかのことを確認しています。
- (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 呼び出しを行います。意外なことに、最初の方法は私のライブラリの残りの部分と完全に連携し、アプリに統合されています。しかし、2番目の方法(私のライブラリにカプセル化されています)は、1つのスレッドからのみFBSessionオブジェクトにアクセスすることを内部的にチェックするメソッドでFacebookSDKをクラッシュさせます(つまり、カプセル化されたメソッドが現在のスレッドとは別のスレッドをスローするようです。 FBSession オブジェクトを作成し、それが機能するのと同じです)。フロー中に新しいスレッドをスローするのではなく、最初のコード ブロックのコードを変更して、2 番目のコード ブロックに示すメソッドに挿入するだけです。何か案は??
ありがとう!