我已將我的應用程序從Facebook SDK 2升級到3.1。Facebook iOS在點擊好後返回到應用程序似乎丟失了會話已確認應用程序
我在RecordsScreen上有一個Post按鈕。如果用戶沒有登錄到Facebook,登錄頁面將會出現,如果用戶已經登錄,則會加載另一個筆尖,以提示用戶輸入信息發佈到他/她自己的牆上。
我已經登錄。之後,每次點擊「發佈」按鈕時,關於應用的頁面都已獲得授權,並詢問您是否繼續單擊「好」出現。點擊好後,該應用程序終止,並從頭開始重新啓動。每當我點擊「發佈」按鈕時,該頁面都會再次出現。它看起來像無法找到有效的會話或令牌丟失。
我已經在模擬器和設備上測試過了。同樣的事情發生。部署目標是iOS5.1。
我沒有輸入的唯一參數是iPhone App Store ID。這會影響上述行爲嗎?
我已經嘗試了很多次,並且找不到解決方案。
任何幫助表示讚賞。
謝謝!
的AOB
編輯於1月4日:
我發現每次openSessionWithAllowLoginUI被調用。返回狀態FBSessionStateClosedLoginFailed。登錄有問題。但是,自從「已授權」頁面出現以後,用戶已登錄。
原因是applicationWillTerminate openSessonWithAllowLoginUI後立即執行。任何人都可以闡明這一點嗎?
在appDelegate.h,我導入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是多視圖控制器將切換碎粒。
我實現了一個類FBHandler來處理Facebook登錄/註銷。 FBHandler.h包含#進口「Facebook.h」和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中:
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;
}
}
在RecordsScreen.m,如果用戶點擊登錄在按鈕中,
if (!FBSession.activeSession.isOpen) {
// Login to Facebook.
[fbHandler openSessionWithAllowLoginUI:YES];
} else {
// If user is login, post to wall.
[self postScoreToWall];
}
這個 – Harikrishnan
沒有必要的應用程序商店標識在Facebook SDK 2中工作正常嗎? – Harikrishnan
是的,它在SDK 2中工作正常。代碼是不同的。 – aobs