2012-08-01 80 views
6

我已經在我的iPhone應用程序根據this教程實現FBConnect SSO。到目前爲止,我已在兩部手機上進行了測試,其中一部可讓我使用該功能,而另一部手機只是打開Facebook應用程序並立即關閉它。我能夠建立一個有效的會議,但對話似乎只關閉其中一個。
可能是什麼問題?任何幫助深表感謝。Facebook連接SSO不工作的一些iPhone手機

+0

這也發生在我身上..檢查FBapp ID是否設置正確 – iMeMyself 2012-08-01 06:47:36

+0

我會研究它。我認爲這與一部手機安裝了Facebook應用程序而另一部沒有安裝Facebook應用程序有關。 – 2012-08-01 06:55:36

+0

你的意思是說FB SDK? – iMeMyself 2012-08-01 07:32:59

回答

3

我認爲你的問題是你沒有正確的配置,無論是在客戶端(您的應用程序),或在服務器端(在FB應用程序配置)。請檢查兩件事如下:

客戶端應用程序:

確保您已經介紹了正確的FBAppId到您的Info.plist作爲URL處理。 Facebook將嘗試使用此處理程序打開該應用程序,如果它不起作用,則您的應用程序將不會打開。

Plist Config

(與你的FB的appid替換XXXXXXXXXX

檢查是否您的應用程序(在的appDelegate)處理上面添加自定義網址:

- (BOOL)handleOpenURL:(NSURL*)url 
{ 
    NSString* scheme = [url scheme]; 
    NSString* prefix = [NSString stringWithFormat:@"fb%@", facebookAppId]; 
    if ([scheme hasPrefix:prefix]) { 
     return [fb handleOpenURL:url]; 
    } 
    return YES; 
} 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    return [self handleOpenURL:url]; 
} 

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
{ 
    return [self handleOpenURL:url]; 
} 

服務器端

檢查您是否正確配置了您的bundl在FB配置頁面中輸入。您可以在https://developers.facebook.com/apps檢查,請選擇您的應用程序,然後在編輯面板:

FB config

如果你有兩件事正確配置,它應該在任何情況下工作(安裝了FBapp或Safari瀏覽器爲基礎)。

+0

感謝您的詳細答案,我只是更新,Facebook的樣品,以及存在的問題存在。你可以在設備上自己測試它。 – zakishaheen 2012-09-07 14:28:44

+0

請參閱https://developers.facebook.com/bugs/361792887232488?browse=search_504a052eac5980628824152 – zakishaheen 2012-09-07 14:32:05

3

我與3.0 SDK看到了這一點。它發生的原因是因爲Facebook緩存訪問令牌的方式。訪問令牌既緩存在你的應用中,也緩存在設備上的Facebook應用中(至少在概念上)。

如果這是你開始在設備上你的應用程序在第一時間,Facebook不會在你的應用程序有效的訪問令牌緩存。但是,它可能在您的應用的Facebook應用中仍然有一個有效的訪問令牌。如果它在Facebook上找到一個,那麼它不必再次詢問用戶,所以對話框出現然後消失,並且它發回訪問令牌。訪問令牌隨後會緩存到您的應用中。

如果重新啓動您的應用程序(而不刪除它),你將不會看到登錄對話框,因爲在所有的訪問令牌在您的應用程序緩存的作用。如果您在設備上刪除應用並重新登錄,您會看到相同的行爲,只要Facebook可以在其上找到緩存的令牌。

我已經找到了解決這一問題。以下是一些示例代碼:

if (![FBSession activeSession].isOpen) { 
    FBSession *session = [[FBSession alloc] initWithAppID:nil permissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone urlSchemeSuffix:nil tokenCacheStrategy:nil]; 
    [FBSession setActiveSession:session]; 
    [session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent  completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
// NOTE openActiveSessionWithPermissions causes the facebook app to hang with a blank dialog if my app is installed, authed, and then reinstalled. openWithBehavior 
// does not. I think it has something to do with the FBSession activeSession. 
//  [FBSession openActiveSessionWithPermissions:self.permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
     switch (status) { 
      case FBSessionStateOpen: 
       [self getFacebookUser]; 
       break; 
      case FBSessionStateClosed: 
       [self fbSessionClosed]; 
       break; 
      case FBSessionStateCreated: 
       [self fbSessionCreated]; 
       break; 
      case FBSessionStateCreatedOpening: 
       [self fbSessionOpening]; 
       break; 
      case FBSessionStateClosedLoginFailed: 
       [self fbSessionClosedLoginFailed]; 
       break; 
      case FBSessionStateOpenTokenExtended: 
       [self fbSessionOpenTokenExtended]; 
       break; 
      case FBSessionStateCreatedTokenLoaded: 
       [self fbSessionCreatedTokenLoaded]; 
       break; 
     } 
    }]; 
} 
} 

openActiveSessionWithPermissions會導致問題,但openWithBehavior不會。 openActiveSession調用同一個openWithBehavior調用,但我認爲設置活動會話的時機不同,因此不起作用。如果我在調用openWithBehavior之前設置活動會話,一切似乎都正常。就你的應用和最終用戶而言,一切都是一樣的。

+0

如果您有iOS SDK 6.0,則尤其如此,那麼應用程序根本無法打開。 – 2012-09-07 08:17:39

+0

我已經找到了解決這個問題的辦法@JoakimEngstrom。 – 2012-10-01 05:54:28

+0

但是這種方法不會使用Facebook SDK 3.1中引入的本地登錄。但它的工作。 – 2012-10-01 09:04:46

1

您需要在整個代碼中插入合適的日誌記錄,發佈代碼併發布正在工作和失敗情況下的日誌。

爲了使日誌(請參閱here爲更先進的技術):

NSLog(@"My log text"); 

在你需要從Facebook的API(在添加記錄所有的回調最低甚至那些你不使用)以及應用程序委託中的handleOpenURL and openUrl方法。

當您連接正在測試的設備時,您的日誌將出現在Xcode管理器的控制檯中 - 這應該會告訴您發生了什麼。如果已安裝,Facebook SDK代碼將首先嚐試使用本機應用程序,否則它將啓動Safari瀏覽器以通過Facebook的Web版本請求授權。

您應該仔細檢查您的Facebook URL方案配置,如AngelGarcíaOlloqui的回答中所述。

+0

我知道。問題是我的應用程序調用Facebook API非常好。登錄發生,FB應用程序不會調用我自己的應用程序。 Facebook樣本也是如此。 – zakishaheen 2012-09-07 14:30:08