2012-07-02 130 views
1

我按照指令,從我的應用程序實現登錄過程給Facebook:的Facebook SDK IOS登錄問題

https://developers.facebook.com/docs/mobile/ios/build/#implementsso

這裏是我的代碼:

- (IBAction)facebookButton:(id)sender { 

    facebook = [[Facebook alloc] initWithAppId:@"383032031757454" andDelegate:self]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    if (![facebook isSessionValid]) { 
     NSArray *permissions = [[NSArray alloc] initWithObjects: 
           @"user_likes", 
           @"read_stream", 
           nil]; 
     [facebook authorize:permissions]; 
     permissions=nil; 
    }  
} 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [facebook handleOpenURL:url]; 
} 

- (void)fbDidLogin { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

} 

登錄之後,允許權限到應用程序,Safari保持打開狀態,我必須手動返回到我的應用程序,但SDK提供的示例應用程序「Hackbook」在接受Safari中的權限並登錄後,會解除Safari並返回到應用程序。我想要做同樣的事情,但我沒有成功。

這是的.plist文件:

enter image description here

感謝

回答

1

已經設置您的Facebook應用程序ID在info.plist文件您的iOS應用的?

類似的情況在this linkthis link。 希望這可以幫助你。

+0

謝謝!我修改了.plist文件,但Safari返回相同的錯誤。我已上傳.plist文件值。 – theomen

+0

再次嘗試刪除應用程序並清理構建。 – Ananth

+0

清潔構建和模擬器後出現同樣的錯誤。謝謝。 – theomen

0

在應用程序Facebook頁面上,您是否配置了iOS SSO的應用程序?

你在使用什麼操作系統?你的代碼將只適用於4.2 +

你沒有完全按照說明,你的plist文件有點不對(我不認爲這是問題)。

+0

我使用的是5.0,所以我認爲它一定沒問題。我之前的plist版本與Facebook表示完全一樣,但它也不起作用。謝謝。 – theomen

1

您可以通過在Facebook.m內部挖掘一點點來輕鬆確定爲什麼它不起作用。在Facebook.m中檢查方法handleOpenURL:

// Facebook.m 
- (BOOL)handleOpenURL:(NSURL *)url { 
    // If the URL's structure doesn't match the structure used for Facebook authorization, abort. 
    if (![[url absoluteString] hasPrefix:[self getOwnBaseUrl]]) { 
     return NO; 
    } 

    NSString *query = [url fragment]; 

    // Version 3.2.3 of the Facebook app encodes the parameters in the query but 
    // version 3.3 and above encode the parameters in the fragment. To support 
    // both versions of the Facebook app, we try to parse the query if 
    // the fragment is missing. 
    if (!query) { 
     query = [url query]; 
    } 

    NSDictionary *params = [self parseURLParams:query]; 

設置斷點下面NSDictionary *params = [self parseURLParams:query];和讀取它的內容。您應該看到錯誤消息爲什麼登錄不起作用。

+0

嗨,按照說明編譯ARC版本的庫後,生成的文件夾只包含.h文件,我有點迷失了它到.m文件的位置。謝謝。 – theomen