2013-04-06 59 views
2

我的Facebook登錄只有在它不能退出應用程序才能登錄時纔有效。例如,只有當應用程序使用iOS6本機對話框或強制Web視圖登錄時才能使用。當我嘗試使用Safari或Facebook應用登錄時,它會顯示一個頁面,表示我已經授權該應用。我點擊「確定」,它將我帶回到我的應用程序,但登錄沒有完成。Facebook SDK 3.2登錄只適用於應用程序不終止

任何想法?我一直堅持這個很長一段時間...

在此先感謝!

下面是我用來登錄的代碼。如果我強制使用web視圖,登錄將會工作,因爲它不必切換出應用程序登錄,但每次爲用戶執行此操作都不會似乎非常有效。

FBSession *session = 
[[FBSession alloc] initWithAppID:@"12345" 
        permissions:nil 
       urlSchemeSuffix:@"paid" 
       tokenCacheStrategy:nil]; 

if (allowLoginUI || 
    (session.state == FBSessionStateCreatedTokenLoaded)) { 
    [FBSession setActiveSession:session]; 
    [session openWithBehavior:FBSessionLoginBehaviorWithFallbackToWebView 
      completionHandler: 
    ^(FBSession *session, FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 
    }]; 
    result = session.isOpen; 
} 
+0

你能展示一些代碼嗎? – 2013-04-06 01:54:14

+0

@FabioCardoso我在 – user1678219 2013-04-08 20:34:48

+0

以上添加了我的登錄代碼基本上,當我返回到我的應用程序時,從不會調用完成處理程序 – user1678219 2013-04-08 20:55:32

回答

0

你有沒有在你的應用程序委託實現- application:openURL:sourceApplication:annotation:,宣佈對URL方案fb[YOUR APP ID]和有線的東西向上,以便在應用程序委託叩最終到達[[FBSession activeSession] handleOpenURL:url]應用程序的支持?

外部網絡視圖的工作方式是,如果登錄成功,則會嘗試打開包含登錄令牌的特定於應用程序的方案的URL。您應該將您的應用設置爲URL方案的處理程序,然後將相關URL傳遞到Facebook SDK以便它可以解碼令牌。

+0

是的,當它再次打開應用程序時,我在URL上做了一個NSLog,它返回一個access_Token。 – user1678219 2013-04-08 22:10:02

+0

'handleOpenURL:'的返回結果是什麼? '[FBSession activeSession]'肯定會返回非'nil'嗎? – Tommy 2013-04-08 22:28:51

+0

'handleOpenURL'返回fb [app_id]://授權/#access_token = [access_token]和'activeSession'非非零 – user1678219 2013-04-08 22:46:15

0

您可以嘗試在您的AppDelegate實施文件中添加以下方法嗎? (假設你已經沒有):

// 
// During the Login with FB flow, the app passes control to the Facebook iOS app or Facebook in mobile Safari. 
// After the user is authenticated, the app will be called back with the session information. 
// This method calls the Facebook session object that handles the incoming URL. 
// 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *) sourceApplication annotation:(id)annotation 
{ 
    return [FBSession.activeSession handleOpenURL:url]; 
} 
+0

是的,我已經調用handleOpenURL我做了一個NSLog的URL,它返回的應用程序ID和access_token 。 – user1678219 2013-04-08 22:08:24

相關問題