我的应用程序中的用户可以使用2种服务登录: Facebook或Google
但是,在以下文件中,所有工作都很好:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation {
...
}我应该决定打电话给Facebook或Google
如果用户有这些应用程序,这比我由sourceApplication决定的要简单,但如果没有(没有本地Facebook帐户链接,没有FB应用程序,没有GooglePlus应用程序),它就链接到浏览器:(我不知道它是从Facebook还是Google开始的)。
有没有办法决定怎么称呼什么?就像
- (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];
}
}发布于 2015-03-25 13:19:26
我们不需要显式地检查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;
}发布于 2017-04-27 08:37:19
对于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:”方法。SDK还包括一个用于它的方法。
火源参考:https://firebase.google.com/docs/auth/ios/google-signin
Facebook参考资料:https://developers.facebook.com/docs/swift/reference/classes/applicationdelegate.html
发布于 2014-01-31 06:04:29
您可以尝试以下方法:
if ([[url absoluteString] rangeOfString:@"<Your Google Bundle ID>"].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前缀,然后调用google+方法,如果url前缀是ur google+包id,如果不是,它将调用fb方法。希望这能有所帮助
https://stackoverflow.com/questions/17198112
复制相似问题