Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 处理两个应用程序:openURL:sourceApplication:annotation_Ios_Objective C_Facebook_Swift - Fatal编程技术网

Ios 处理两个应用程序:openURL:sourceApplication:annotation

Ios 处理两个应用程序:openURL:sourceApplication:annotation,ios,objective-c,facebook,swift,Ios,Objective C,Facebook,Swift,我有两个SDK需要使用application:openURL:sourceApplication:annotation方法。一个是FacebookSDK,第二个是GooglePlusSDK 这些方法是: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

我有两个SDK需要使用
application:openURL:sourceApplication:annotation
方法。一个是
FacebookSDK
,第二个是
GooglePlusSDK

这些方法是:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
我的问题是如何将它们迁移到一种方法中?最好的方法是什么


提前谢谢。

您可以这样做:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL shouldOpen = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
    shouldOpen = shouldOpen ? shouldOpen : [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];

    return shouldOpen;
}

使用逻辑或运算符
|

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

快速版本

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String!, annotation: AnyObject) -> Bool {
    return FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication) || GPPURLHandler.handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}

您还可以根据
URL

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString  *)sourceApplication annotation:(id)annotation
{
if FB URL prefix
//Call FB method
else 
//Google plus method
}
一种更干净的方式(这里是Swift)是:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String!, annotation: AnyObject) -> Bool {
    var handled: Bool
    if let facebook = url.scheme?.hasPrefix("fb") {
        handled = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication)
    } else {
        handled = GPPURLHandler.handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
    }
    // include any specific handling code as necessary
    return handled
}
我最后做了:

- (BOOL)application:(UIApplication *)application //facebook & Google+
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    return( [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation]
           ||

           [GPPURLHandler handleURL:url
                  sourceApplication:sourceApplication
                         annotation:annotation]
           );

    ;
}

使用简单的
if语句
,您不能基于中的url进行确定吗?URL方案不会有所不同吗?谢谢你。你节省了我的时间。祝福.shouldOpen |=[GPPURLHandler句柄..]