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];
}
どんな助けも大歓迎です。
投稿された回答の一部は一時的な修正でした-しかし、ユーザーがログアウトして再度ログインしようとすると問題は後で発生する可能性があります-これは匿名ユーザーも許可したためだと思います-クリアできる唯一の方法は電話することです[pfuser logout]ログインする前
シミュレーターまたは携帯電話からアプリを削除してから、アプリを再構築して再実行します。古いトークンがキャッシュされる場合があります。アプリでこの問題を解決しました。
このページをご覧ください: https://parse.com/tutorials/session-migration-tutorial
ほとんどの場合、アプリはレガシーセッショントークンを使用していました。アプリIDとクライアントキーを設定した直後にこれをアプリのデリゲートに追加することで、取り消し可能なセッショントークンに移行できます。
[PFUser enableRevocableSessionInBackground];
ParseのWebサイトには、このエラーの処理に関するセクションがあります。このセクションは、さらに役立つ場合があります。 https://www.parse.com/docs/ios_guide#sessions-handleerror/iOS
さらにいくつかの手順に従う必要があると思います:
applicationDidBecomeActive
に[FBSDKAppEvents activateApp]
を追加する必要があります。
あなたは書くべきですreturn [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
メソッドdidFinishLaunchingWithOptions
in AppDelegate
。
上記の手順を試してみてください。
取り消し可能なセッションでは、対応するSessionオブジェクトがParse Cloudから削除されると、現在のセッショントークンが無効になる可能性があります。これは、ユーザーが他のデバイスからログアウトできるようにする、または手動で削除する Cloud Code経由のセッション、REST API、またはデータブラウザ。自動期限切れのためにセッションも削除される可能性があります(アプリ設定で構成されている場合)。デバイスのセッショントークンがParse Cloud上のセッションオブジェクトに対応しなくなった場合、 「エラー209:無効なセッショントークン」で失敗します。