2016-09-29 3 views
0

소셜 네트워크를 사용하여 로그인하는 앱을 만들고 있습니다. 내 문제는 Google이 func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) ->Boolfunc application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool을 호출하는 것입니다.나는이 두 함수를 App Delegate에서 온 소셜 네트워크에 따라 호출해야합니다.

사실 AppDelegate에서이 두 가지 기능을 사용하면 Facebook이 앱으로 다시 돌아 가지 않지만 Google은이를 수행합니다. 나는이 두 가지 기능간에 충돌이 있다고 생각한다.

플래그 var를 설정하려고했지만 모든 함수 외부에서 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 기능은 특정 라이브러리가 실제로 문제의 URL을 처리 여부를 알 수 있도록하기 위해 Bool을 반환합니다. 수표를 하나의 개별 위임 메서드로 결합하여 둘 중 하나가 true를 반환하는 경우 true를 반환 할 수 있습니다. 그 코드가 어떻게 보이는지 보여주기 위해 코드를 수정했습니다. 유의 사항 iOS 8을 지원하려고하고 있다고 가정하기 때문에 최신 버전에서 iOS 8 deprecated 함수를 호출합니다. 그렇지 않은 경우, 당신은 그 것을 완전히 없애고 그 몸을 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]!) 
} 

편집 : 당신이 새로운 기능을 구현 한 감지하면 보조 노트로, 당신의 페이스 북 함수가 호출 받고되지 않은 이유는 호출하지 않습니다, 때문에 아이폰 OS 9+ 시스템에 더 오래된 것. 최신 버전을 완전히 제거했다면 이전 버전이 여전히 불려질 것입니다 (그리고 Facebook 처리 방식이 작동 할 것입니다).

관련 문제