处理OpenUrl:使用Facebook和Google[英] Handling openURL: with Facebook and Google

本文是小编为大家收集整理的关于处理OpenUrl:使用Facebook和Google的处理方法,想解了处理OpenUrl:使用Facebook和Google的问题怎么解决?处理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或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];

    }

}

推荐答案

我们不需要明确检查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;
}

其他推荐答案

对于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+,则可以使用另一个'打开URL:'方法. SDK还包括一种方法.

firebase参考:/ios/google-signin

facebook参考:/swift/reference/classes/applicationdelegate.html

其他推荐答案

您可以尝试以下内容:

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前缀,然后如果URL前缀为ur google+ bundle ID,则调用Google+方法,如果没有,它将调用FB方法. 希望这有帮助

本文地址:https://www.itbaoku.cn/post/924679.html