2011-04-14 77 views
7

我知道在Graph API之前這是可能的。iOS:無需離開應用程序即可連接到Facebook

我工作的iPhone應用程序可能不在後臺(其中一個要求)。
此外,應用程序啓動時還有一個登錄屏幕。
因此,爲了向Facebook進行身份驗證,然後返回到應用程序並且每次用戶想要共享某個內容時再次登錄,都不適合轉到後臺。

所以,我的問題是,如果有一種方法可以在不離開應用的情況下使用Facebook進行身份驗證。

順便說一句,我試圖使用舊的API。
它在一開始工作,但昨天它停止工作。
我只在舊的Facebook登錄網絡視圖中看到一個空白屏幕。
我還檢查了一個使用舊的Facebook Connect API的舊應用程序,我也在該應用程序中獲得了同樣的空白登錄屏幕。

任何想法將不勝感激。

預先感謝您。

-
Michael。

回答

8

在Facebook.m

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth 
        safariAuth:(BOOL)trySafariAuth { 
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
           _appId, @"client_id", 
           @"user_agent", @"type", 
           kRedirectURL, @"redirect_uri", 
           @"touch", @"display", 
           kSDKVersion, @"sdk", 
           nil]; 

方法註釋掉該

UIDevice *device = [UIDevice currentDevice]; 
    if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) { 
    if (tryFBAppAuth) { 
     NSString *fbAppUrl = [FBRequest serializeURL:kFBAppAuthURL params:params]; 
     didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; 
    } 

    if (trySafariAuth && !didOpenOtherApp) { 
     NSString *nextUrl = [NSString stringWithFormat:@"fb%@://authorize", _appId]; 
     [params setValue:nextUrl forKey:@"redirect_uri"]; 

     NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params]; 
     didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]]; 
    } 
    } 

這將阻止應用去背景,並顯示你的標準FB對話框。

+0

謝謝。好的解決方案 – 2011-04-17 08:04:03

+0

也謝謝你 - 一位客戶爲此而絕望,而不是單點登錄,這爲我節省了很多工作。你能否確認在Facebook取消對OAUTH 1和舊版SDK的支持後,這將繼續工作? – 2011-09-29 10:34:58

+0

我認爲它應該可以工作,但我會建議您在FB發生某些事情時更新應用程序。 – 2011-09-29 13:09:51

6

在這裏你有一個替代解決方案。

如果你不喜歡改變了Facebook SDK代碼,並想辦法解決,讓您SSO或老式機制之間進行選擇,可以實現這樣的擴展:

//Facebook_SSOExtension.h 
-------------------------------------------------------- 

@interface Facebook(SSOExtension) 
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO; 
@end 

//Facebook_SSOExtension.m 
-------------------------------------------------------- 

//So warnings do not appear 
@interface Facebook(PrivateSSOExtension) 
- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth 
        safariAuth:(BOOL)trySafariAuth; 
-(void) setPermissions:(NSArray*) permissions; 
@end 

@implementation Facebook(SSOExtension) 
-(void) authorize:(NSArray*)permissions useSSO:(BOOL) useSSO 
{ 
    [self setPermissions: permissions]; 
    [self authorizeWithFBAppAuth:useSSO safariAuth:useSSO]; 
} 
@end 

即使雖然這需要比註釋sso代碼更多的工作,但是您可以更新facebook-sdk而不存在重大問題(如果它們重命名authorizeWithFBAppAuth:safariAuth:您的擴展將無法使用,請使用斷言來快速檢測此問題)。此外,如果您正在構建可重複使用的組件以與Facebook進行交互而無需一遍又一遍地重複,這也可以爲您節省一些工作。

乾杯。

+0

那裏的好點:) – 2011-09-29 13:05:49

+0

目前--setPermissions導致崩潰。 [Facebook setPermissions:]:無法識別的選擇器 – 2012-09-28 19:19:36

相關問題