iOS6 ネイティブ機能と他の Facebook 機能を使用するために、アプリケーションを古い Facebook SDK から新しい Facebook SDK 3.1 に変換していますが、シミュレーターで一貫して発生し、デバイスではめったに発生しない問題があります。
Facebook にログインしようとすると、アプリのバックグラウンド化と Safari または Facebook アプリによる認証の代わりに、ログイン用のアプリの上にモーダル ウィンドウが表示されます (Facebook SDK 3.0 に切り替える前であっても、これは iOS6 で始まったと思います) /3.1)。このウィンドウでは、ユーザー名とパスワードを入力できますが、認証のために右上の [OK] をクリックしても何も起こりません。AppDelegate 内の application:openURL:sourceApplication:annotation: へのコールバックは発生しません。
私の共有 FacebookController コード (複数のプロジェクトで使用しています) では、Facebook のサンプル コードに従って認証を試みるときに FBSession を初期化しています。
FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:readPermissions defaultAudience:FBSessionDefaultAudienceNone urlSchemeSuffix:self.fbUrlSchemeSuffix tokenCacheStrategy:nil];
if(session.state == FBSessionStateCreated || session.state == FBSessionStateCreatedTokenLoaded)
{
[FBSession setActiveSession:session];
// we open after the fact, in order to avoid overlapping close
// and open handler calls for blocks
[session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
...
ダイアログの x キャンセル ボタンをクリックしない限り、完了ハンドラのコードは実行されません (この場合、期待どおりにエラーが発生します)。
iOS ターゲット プロパティ (info.plist) で FacebookAppID を設定しており、fb###[url_scheme_suffix] で URL スキームも設定しています。
私のコードと Facebook のサンプル コードの唯一の違いは、アプリの無料バージョンと有料バージョンがあるため、URL スキーム サフィックスを使用していることです。
アプリが Safari を使用してログインする場合、指定されたコードで動作します。Facebookアプリにすばやく切り替える場合も機能します。さらに、共有 facebook ios6 アカウント設定が機能します。アプリは、アプリ内モーダルを使用する場合にのみ失敗します。
他の誰かがこれに遭遇しましたか?