2015-07-19 67 views
2

我已經通過Facebook在我的應用程序中成功部署了登錄。然後,我嘗試添加通過Google+登錄的可能性,但是在經歷了幾個漫長的夜晚編碼和來自人們的幾個帖子之後,我放棄了比現在的例子中存在的路障更高級的內容:How can I login to google-plus using google-plus-ios-sdk-1.7.1 sdk?Facebook登錄和谷歌登錄之間的衝突 - iOS

我現在試圖通過遵循從Google Developer site看似簡單的指令來實施Google登錄。

但是,Google解釋了這種方式與通過Facebook運行登錄所需的設置產生了若干衝突。 我試圖通過使用Pod重寫Facebook代碼,並在安裝Google Sign In的同時安裝它,但我無法使其工作(仍阻礙通過Facebook進行身份驗證)。

+0

@NathanTuggy:感謝您的編輯 – Stefano

回答

5

實現這樣的方式。

- (BOOL) application:(UIApplication *)application 
       openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
      annotation:(id)annotation { 


    if ([[url scheme] isEqualToString:FBTOKEN]) { 
     return [FBSession.activeSession handleOpenURL:url]; 

     return [FBAppCall handleOpenURL:url 
         sourceApplication:sourceApplication 
          withSession:FBSession.activeSession]; 
    } 
    else { 
      [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; 

    } 
    return YES; 
} 
+0

我會試試這個,讓你知道。謝謝。 – Stefano

+0

當我使用最新的iOS SDK 4.5.1的FBAppCall時,我得到了「使用未聲明的標識符」消息。您使用的是哪種iOS SDK版本? – SAHM

+0

@Waruna我檢查了你的答案,但是,如果我可以獲得訪問令牌插入建議的條件,我收到一個錯誤的FBSession(未知的接收器)和另一個FBAppCall(使用未聲明的標識符),類似於描述由上面的其他用戶提供。我正在使用iOS SDK 4.4。有關如何解決這個問題的任何想法? – Stefano

0

檢查是否執行或不GPPURLHandler方法中

-(BOOL) application:(UIApplication *)application 
       openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
      annotation:(id)annotation { 

} 
    -
+0

謝謝您的回答。這正是重點。 Facebook需要一個類似的處理程序,就像GooglePlus需要它一樣(因此我轉向Google登錄)。現在您指出要爲Google登錄使用相同的處理程序。這是我在該方法中的: - – Stefano

+0

// GooglePlus ATTEMPT return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; // Facebook返回[[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; – Stefano

+0

我很困惑這兩個人如何一起工作,因爲到目前爲止,只要我取消註釋Google塊,我從Facebook塊中獲得了很好的衝突。再次感謝。 – Stefano

2

我以這種方式實現了谷歌和Facebook

func application(application: UIApplication, 
    openURL url: NSURL, 
    sourceApplication: String?, 
    annotation: AnyObject) -> Bool { 

     let options: [String: AnyObject] = [UIApplicationOpenURLOptionsSourceApplicationKey: sourceApplication!, 
      UIApplicationOpenURLOptionsAnnotationKey: annotation] 

      return FBSDKApplicationDelegate.sharedInstance().application(
       application, 
       openURL: url, 
       sourceApplication: sourceApplication, 
       annotation: annotation) || 
      GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: nil) 

} 
-1

這與谷歌註冊爲我工作在2.4.0版和Facebook IOS SDK 4.10.0

1)刪除方法

func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool 

從AppDelegate中

2)實現如下:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 



     if url.scheme == "fbxxxxxxxxxxxx" { 
      return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
     } 
     else { 
      let options: [String: AnyObject] = [UIApplicationOpenURLOptionsSourceApplicationKey: sourceApplication!, 
       UIApplicationOpenURLOptionsAnnotationKey: annotation] 

      return FBSDKApplicationDelegate.sharedInstance().application(
      application, 
      openURL: url, 
      sourceApplication: sourceApplication, 
      annotation: annotation) || 
      GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: nil) 
     } 


    } 

在FB URL方案是從URL方案採取的Info.plist