我必须根据我在 App Delegate 中来自哪个社交网络来调用这两个函数
I have to call this two functions depending on which social network I come from in App Delegate
我正在创建一个使用社交网络登录的应用程序。我的问题是 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
.
问题在于,在 AppDelegate 中具有这两个功能,Facebook 不会将我带回应用程序,但 Google 会。我认为这两个功能之间存在冲突。
我试图设置一个标志变量,但我无法在任何函数之外设置一个 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])
}
每个第三方 handleURL
功能 return 都是 Bool
让您知道该特定库是否实际处理了有问题的 URL。您可以将检查合并到一个单独的委托方法中,如果其中一个 return 为真,则 return 为真。我修改了您的代码以向您展示它的外观。请注意,我在较新的函数中调用了 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 处理会起作用)。
我正在创建一个使用社交网络登录的应用程序。我的问题是 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
.
问题在于,在 AppDelegate 中具有这两个功能,Facebook 不会将我带回应用程序,但 Google 会。我认为这两个功能之间存在冲突。
我试图设置一个标志变量,但我无法在任何函数之外设置一个 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])
}
每个第三方 handleURL
功能 return 都是 Bool
让您知道该特定库是否实际处理了有问题的 URL。您可以将检查合并到一个单独的委托方法中,如果其中一个 return 为真,则 return 为真。我修改了您的代码以向您展示它的外观。请注意,我在较新的函数中调用了 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 处理会起作用)。