0

http://developers.facebook.com/docs/howtos/link-to-your-native-app/を読みましたが、3.0 でディープ リンクを処理する方法について混乱しています。ユーザーが私のアプリの appRequest をクリックすると、FB が特別な URL で私のアプリを開くとします。Appdelegate の openURL メソッドに次のようにさせています。

return [FBSession.activeSession handleOpenURL:url];

チュートリアルには次のように書かれています。

If your app requires an authorized user, handle the processing of the target URL in the
SDK callbacks implemented after a successful login, the fbDidLogin method.

ただし、3.0 では facebook.m オブジェクトを使用する代わりに FBSession.activeSession を使用するように切り替えたため、fbDidLogin デリゲート メソッドは呼び出されなくなりました。実際、Facebook オブジェクトの状態は変更されないため、FBSessionDelegate メソッドは呼び出されません。では、どこで URL を処理すればよいのでしょうか?

4

1 に答える 1

0

セッションを開くときに設定したハンドラーでこれを処理する可能性があります。

たとえば、次のような方法でセッションを開いたとします。

[FBSession openActiveSessionWithReadPermissions:nil
                                      allowLoginUI:YES
                                 completionHandler:^(FBSession *session,
                                                     FBSessionState state,
                                                     NSError *error) {
                                     [self sessionStateChanged:session
                                                         state:state
                                                         error:error];
                                 }];

定義できるセッションの変更を処理するために、ディープ リンク処理コードをメソッド セットに入れることができます。例:

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                // Handle deep link      
            }
            break;
        case FBSessionStateClosed:
            self.user = nil;
            break;
        case FBSessionStateClosedLoginFailed:
            self.user = nil;
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}

ディープ リンク処理の実際のサンプルについては、 https://github.com/fbsamples/ios-social-cafe/を参照してください。

于 2012-10-22T22:46:33.683 に答える