8

iOS6 で Facebook アカウントが設定されていて、ユーザーがそれをオフにしている場合、SDK は単に FBSessionStateClosedLoginFailed ステータスを返します。このことから、ユーザーが iOS でオフにしたのか (ケース 1)、iOS にアカウントが設定されておらず、FB アプリまたは Web アプリからの許可を拒否したのか (ケース 2) はわかりません。

表示する必要があるエラー メッセージは、2 つのケースでかなり異なります。最初のケースでは、ユーザーにスイッチをオンに戻す方法を伝える必要がありますが、ケース 2 ではその指示が混乱を招く可能性があります。

iOS アカウント フレームワークを使用してみましたが、スイッチをオフにすると、Facebook アカウントがあっても存在しないと言われます。また、認証に成功した場合はアカウント識別子を書き留めてみましたが、オフになっていると accountWithIdentifier も同様に失敗します。

私たちの拒否がiOSまたはFB自体から来ているかどうかを知る方法を知っている人はいますか?

4

3 に答える 3

6

一般的な SDK のポリシーでは、何らかの操作が失敗している場合、OS からの基になるエラー情報がアプリに通知されます。(もちろん、すべての失敗ケースが OS API の失敗から始まるわけではありません。) このポリシーの理由は、説明したようなより正確なエラー処理とログ記録のシナリオをサポートすることです。余談ですが、SDK 内でこのパターンに従わない場所を見つけた場合は、バグですので報告してください。

この場合、FBSession は NSError オブジェクトをハンドラーに渡し、userInfo の FBErrorInnerErrorKey 値を OS から返されたエラー オブジェクトに設定します。ユーザーに正確なエラー メッセージを提供するために、FBSessionStateClosedLoginFailed ケースで次のようなコードのスニペットを使用できます。

if (error) {
    NSError *innerError = error.userInfo[FBErrorInnerErrorKey];
    if ([innerError.domain isEqualToString:ACErrorDomain] &&
        innerError.code == ACErrorPermissionDenied) {
        NSLog(@"User dissallowed permissions via iOS 6.0 integration");
    }
}

お役に立てれば!

* 更新 * デバイスでこれを試したところ、2 つのバグが見つかりました。1 つは iOS 6.0 にあり、もう 1 つは SDK にあります。iOS 6.0 のバグは、スイッチがオフの場合、OS から NSError オブジェクトが渡されないため、内部エラーが発生しないことです。したがって、上記の一般的な解決策は、問題の特定のケースでは機能しません。2 番目のバグでは、SDK 3.1.1 を使用してこの問題を一時的に解決できます。

SDK 3.1.1 のバグは、error.userInfo[FBErrorLoginFailedReason] を FBErrorLoginFailedReason の値に設定することです。内部エラーが NIL の場合、この理由の値を確認して、アプリのスライダーがオフに設定されていることを確認できます。このバグが SDK で修正されると、コードのテストが中断されます。ただし、理由を iOS 6 に関連するより論理的な理由に設定する予定です。この値に依存することにした場合は、アプリケーション。

于 2012-10-04T17:48:24.193 に答える
2

iOS 6.0 以降で、設定デバイスにアクセスし、アプリで facebook の統合をオフにした場合。コードで確認できます

//Callback method for facebook authorization
- (void)sessionStateChanged:(FBSession *)session
                  state:(FBSessionState) state
                  error:(NSError *)error
{
    .....
    if (error) {        
        NSString *valueError = [error.userInfo objectForKey:FBErrorLoginFailedReason];
        if ([valueError compare:FBErrorLoginFailedReasonSystemDisallowedWithoutErrorValue] == NSOrderedSame)
            NSLog(@"To use your Facebook account with this app, open Settings > Facebook and make sure this app is turned on.");
    }
}
于 2013-06-21T10:19:05.207 に答える
-1

ログインに失敗した場合は、iOSが拒否できない古いwebviewfacebookログインダイアログを開いてみることができます。それが成功した場合、彼らはiOS 6を持っていないか、iOS6であなたをオフに切り替えました。

于 2012-10-03T22:45:25.927 に答える