处理openURL:使用Facebook和Google

我的应用中的用户可以使用2种服务登录:Facebook或Google

一切正常,但是,在:

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

我应该决定拨打Facebook回拨或Google回调

如果用户有应用程序,它很容易,而不是由sourceApplication决定,但当没有(没有本地Facebook帐户链接,没有FB应用程序,没有GooglePlus应用程序),它链接到浏览器:(我不知道它是否是来自Facebook或谷歌

有什么方法可以决定叫什么? 喜欢

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation { // how to decide? if (facebook) { return [FBSession.activeSession handleOpenURL:url]; } else if (google) { return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; } } 

我们不需要明确地需要检查URL,下面的代码是这样的: –

 - (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation { if ([GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]) { return YES; }else if([FBAppCall handleOpenURL:url sourceApplication:sourceApplication]){ return YES; } return NO; } 

您可以尝试以下方法:

 if ([[url absoluteString] rangeOfString:@""].location == NSNotFound) { // Call FBAppCall's handleOpenURL:sourceApplication to handle Facebook app responses BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication]; // You can add your app-specific url handling code here if needed return wasHandled; } else { return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; } return YES; 

调用上面的方法

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

在你的appDelegeate.m

基本上这将是检查url前缀,然后调用谷歌+方法,如果url前缀是你的谷歌+包ID,如果没有,它将调用fb方法。 希望这可以帮助

iOS9中不推荐使用“application:openURL:sourceApplication:annotation:”方法。 所以现在你可以使用喜欢。

 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { // For Google sign in SDK if ([[GIDSignIn sharedInstance] handleURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]) { return YES; // For Facebook SDK }else if ( [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]){ return YES; //For Google plus SDK }else if ([GPPURLHandler handleURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]){ return YES; } return NO; } 

对于Swift用户,(来自user2144179的想法)

导入框架下方

 import Firebase import GoogleSignIn import FacebookCore // (FBSDKCore's alternative for swift) 

并在你的委托方法

 // when your target is under iOS 9.0 func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { let isFBOpenUrl = SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) let isGoogleOpenUrl = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation) if isFBOpenUrl { return true } if isGoogleOpenUrl { return true } return false } 

或者如果您的目标是9.0+,您可以使用另一种’open url:’方法。 SDK还包括一个方法。

Firebase参考: https ://firebase.google.com/docs/auth/ios/google-signin

Facebook参考: https : //developers.facebook.com/docs/swift/reference/classes/applicationdelegate.html

您可以尝试使用Swift 4.2版本:

 func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { let isFBOpenUrl = SDKApplicationDelegate.shared.application(app, open: url, options: options) let isGoogleOpenUrl = GIDSignIn.sharedInstance().handle(url as URL?, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) if isFBOpenUrl { return true } if isGoogleOpenUrl { return true } return false } 

您将要使用[[UIApplication sharedApplication] canOpenURL:]

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if( [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]) { return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]; } else if([[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]) { return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; } return NO; }