2016-09-29 56 views
0

我正在創建一個使用社交網絡登錄的應用程序。我的問題是Google調用func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) ->Bool和Facebook,它調用func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool我必須調用這兩個函數,具體取決於我來自哪個社交網絡App Delegate

事情是,在AppDelegate中擁有這兩個函數,Facebook不會讓我回到應用程序,但谷歌。我認爲這兩個功能之間存在衝突。

我試着設置一個標誌變量,但我不能在任何函數之外設置一個if/else語句。

我該怎麼辦?

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

     return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

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

     return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey]) 

} 
+0

您不能擁有相同委託方法的兩個副本。只用一個。 – rmaddy

回答

0

每個那些第三方的handleURL函數返回一個Bool讓你知道,尤其是庫是否實際處理問題的URL。您可以將檢查合併到一個單獨的委託方法中,如果其中任何一個返回true,則返回true。我修改了你的代碼,告訴你可能看起來像什麼。注意我在較新版本中調用iOS 8棄用函數,因爲我假設你也嘗試支持iOS 8。如果情況並非如此,你可以完全擺脫那個,並將其身體移到iOS 9功能中。

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 
{ 
     if FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
     { 
      return true 
     } 
     else if GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation) 
     { 
      return true 
     } 
     else 
     { 
      // put more logic here as you need to but for now just return false if you didn't handle the URL 
      return false 
     } 
} 

func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool 
{ 
     return self.application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey]!) 
} 

編輯:作爲一個側面說明,爲什麼你的Facebook的功能沒有得到所謂的原因是因爲在iOS 9+系統上,如果它檢測到您已實現了新的功能,它永遠不會調用較舊的那個。如果你完全刪除了一個新的,你會注意到舊的仍然會被調用(並且你的Facebook處理會起作用)。

相關問題