web-dev-qa-db-ja.com

無効なセッショントークンの解析(コード:209、バージョン:1.7.1)

ParseとFacebook SDKの両方(それぞれ1.7.1と4.0)を更新しました-どちらも追加するのに苦労しました!

ただし、Facebookでログインしようとすると209エラーが発生します。

これが私のコードの例です:

- (void)loginWithFacebook:(HMSuccessBlock)completion{
NSArray *permissionsArray = @[@"user_about_me",@"user_location",@"user_friends",@"user_relationships"];

// Login PFUser using Facebook

[PFFacebookUtils logInInBackgroundWithReadPermissions:permissionsArray block:^(PFUser *user, NSError *error) {
    if (!user) {
        NSLog(@"Uh oh. The user cancelled the Facebook login.");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Log In Error"
                                                        message:error.localizedDescription
                                                       delegate:nil
                                              cancelButtonTitle:nil
                                              otherButtonTitles:@"Dismiss", nil];
        [alert show];
        completion(NO, error);

    } else if (user.isNew) {
        NSLog(@"User signed up and logged in through Facebook!");
        if (completion) {
            completion(YES, nil);
        }
    } else {
        NSLog(@"User logged in through Facebook!");
           completion(YES, nil);
    }
}];
}

次の[エラー]を返します:無効なセッショントークン(コード:209、バージョン:1.7.1)

私の最初の考えは、問題はアプリデリゲートのコードに関係しているということです-古いバージョンのfacebooksdkでは、次のコードを適用します

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBAppCall handleOpenURL:url
              sourceApplication:sourceApplication
                    withSession:[PFFacebookUtils session]];
}

しかし、更新されたバージョンでこれを複製するものを見つけることができないようですので、私のコードは

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                      openURL:url
                                            sourceApplication:sourceApplication
                                                   annotation:annotation];
}

どんな助けも大歓迎です。

31
user499846

投稿された回答の一部は一時的な修正でした-しかし、ユーザーがログアウトして再度ログインしようとすると問題は後で発生する可能性があります-これは匿名ユーザーも許可したためだと思います-クリアできる唯一の方法は電話することです[pfuser logout]ログインする前

7
user499846

シミュレーターまたは携帯電話からアプリを削除してから、アプリを再構築して再実行します。古いトークンがキャッシュされる場合があります。アプリでこの問題を解決しました。

34
Ronaldoh1

このページをご覧ください: https://parse.com/tutorials/session-migration-tutorial

ほとんどの場合、アプリはレガシーセッショントークンを使用していました。アプリIDとクライアントキーを設定した直後にこれをアプリのデリゲートに追加することで、取り消し可能なセッショントークンに移行できます。

    [PFUser enableRevocableSessionInBackground];

ParseのWebサイトには、このエラーの処理に関するセクションがあります。このセクションは、さらに役立つ場合があります。 https://www.parse.com/docs/ios_guide#sessions-handleerror/iOS

18
Mohssen Fathi

さらにいくつかの手順に従う必要があると思います:

  1. applicationDidBecomeActive[FBSDKAppEvents activateApp]を追加する必要があります。

  2. あなたは書くべきです
    return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];メソッドdidFinishLaunchingWithOptions in AppDelegate

上記の手順を試してみてください。

2
R_Developer

取り消し可能なセッションでは、対応するSessionオブジェクトがParse Cloudから削除されると、現在のセッショントークンが無効になる可能性があります。これは、ユーザーが他のデバイスからログアウトできるようにする、または手動で削除する Cloud Code経由のセッション、REST API、またはデータブラウザ。自動期限切れのためにセッションも削除される可能性があります(アプリ設定で構成されている場合)。デバイスのセッショントークンがParse Cloud上のセッションオブジェクトに対応しなくなった場合、 「エラー209:無効なセッショントークン」で失敗します。

1
Yogesh Bangar