首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理openURL:使用Facebook和Google

处理openURL:使用Facebook和Google
EN

Stack Overflow用户
提问于 2013-06-19 18:00:14
回答 10查看 13.8K关注 0票数 33

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

但是,在以下文件中,所有工作都很好:

代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation {
    ...
}

我应该决定打电话给Facebook或Google

如果用户有这些应用程序,这比我由sourceApplication决定的要简单,但如果没有(没有本地Facebook帐户链接,没有FB应用程序,没有GooglePlus应用程序),它就链接到浏览器:(我不知道它是从Facebook还是Google开始的)。

有没有办法决定怎么称呼什么?就像

代码语言:javascript
复制
- (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];

    }

}
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2015-03-25 13:19:26

我们不需要显式地检查URL,下面的代码是这样做的:

代码语言:javascript
复制
- (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;
}
票数 39
EN

Stack Overflow用户

发布于 2017-04-27 08:37:19

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

导入以下框架

代码语言:javascript
复制
import Firebase
import GoogleSignIn
import FacebookCore // (FBSDKCore's alternative for swift)

在您的委托方法中

代码语言:javascript
复制
// 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

票数 9
EN

Stack Overflow用户

发布于 2014-01-31 06:04:29

您可以尝试以下方法:

代码语言:javascript
复制
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;

调用上述方法

代码语言:javascript
复制
(BOOL)application:(UIApplication *)application
          openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
       annotation:(id)annotation 

在你的appDelegeate.m

基本上,这要做的是检查url前缀,然后调用google+方法,如果url前缀是ur google+包id,如果不是,它将调用fb方法。希望这能有所帮助

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17198112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档