Facebook SDK 2から3.1にアップグレードしました。Facebook iOSは、クリックした後にアプリケーションに戻るときにセッションが失われているようです。既にアプリを承認済みです。
私はRecordsScreenにポストボタンを持っています。ユーザーがFacebookにログインしていない場合は、ログインページが表示され、ユーザーが既にログインしている場合は別のペン先が読み込まれ、ユーザーは自分の壁に投稿するメッセージを入力するように求められます。
私はすでにログインしています。その後、[ポスト]ボタンをクリックするたびに、そのアプリケーションに関するページが既に承認されていて、[OK]をクリックして続行するかどうか尋ねられます。 [OK]をクリックすると、アプリは終了し、最初からやり直します。ポストボタンをクリックするたびに、この同じページが再び表示されます。有効なセッションが見つからないか、トークンが失われたように見えます。
私はこれをシミュレータとデバイスでテストしました。同じことが起こります。デプロイターゲットはiOS5.1です。
私が入力していない唯一のパラメータはiPhone App Store IDです。これは上記の動作に影響を及ぼしますか?
私はすでに多くの時間を試みており、解決策を見つけることができませんでした。
何か助けていただければ幸いです。
ありがとうございます!
AOBS 1月4日に編集
:
私はすべての時間openSessionWithAllowLoginUIが呼び出されることがわかりました。状態FBSessionStateClosedLoginFailedが返されます。ログインに問題があります。しかし、すでに認証済みのページが表示されているので、ユーザーは既にログインしています。
理由は、applicationWillTerminateがopenSessonWithAllowLoginUIの直後に実行されるためです。誰もこれに光を当てることができますか? appDelegate.hで
、IはFacebookSDK/FacebookSDK.hをインポートしappDelegate.mにおいて、以下が実現されている:
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBSession.activeSession handleOpenURL:url);
}
-(void)applicationDidBecomeActive:(UIApplication *)application {
[FBSession.activeSession handleDidBecomeActive];
}
-(void)applicationWillTerminate:(UIApplication *)application {
[FBSession.activeSession close];
}
mainViewControllerが切り替わりマルチビューコントローラでありますペン先。
Facebookログイン/ログアウトを処理するFBHandlerクラスを実装しました。 FBHandler.hは「Facebook.h」の#importが含まれているとFBHandlerはニブの
-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error {
switch(state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
default:
break;
}
[[NSNotificationCenter defaultCenter]postNotificationName:FBSessionStateChangedNotification object:session];
// If there is an error, display the alert view. I have skipped this code.
}
-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
return [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
一つを含むクラスである - RecordsScreen.xibは、Facebookのログイン/ログアウトボタンが含まれています。 RecordsScreen.m(ユーザーがFacebookのからの彼/彼女のスコアとログインまたはログアウトを見ることができる場所)で、以下は、のviewDidLoadに追加されます。RecordsScreen.mで
fbHandler = [[FBHandler alloc] init];
[fbHandler openSessionWithAllowLoginUI:NO];
// Also, we will listen to FBSessionStateChangedNotification in viewDidLoad. Code is skipped here.
// The implementation of sessionStateChanged in RecordsScreen:
-(void)sessionStateChanged:(NSNotification *)notification {
if (FBSession.activeSession.isOpen) {
if (self.facebook == nil) {
self.facebook = [[Facebook alloc]initWithAppId:FBSession.activeSession.appID andDelegate:nil];
self.facebook.accessToken = FBSession.activeSession.accessToken;
self.facebook.expirationDate = FBSession.activeSession.expirationDate;
}
} else {
self.facebook = nil;
}
}
、ユーザーがログインをクリックした場合
if (!FBSession.activeSession.isOpen) {
// Login to Facebook.
[fbHandler openSessionWithAllowLoginUI:YES];
} else {
// If user is login, post to wall.
[self postScoreToWall];
}
このためのApp Store IDが不要です – Harikrishnan
Facebook SDK 2でうまく動作していますか? – Harikrishnan
はい、SDK 2でうまくいきました。コードが異なります。 – aobs