如何替换 - (BOOL)应用程序:openURL:sourceApplication:annotation:(id)annotation

时间:2016-02-11 23:40:31

标签: ios objective-c

我尽力解决这个问题,但绝对没有运气。

我有这个段落用来正常工作。但需要解决弃用方法。

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

    NSLog(@"%@",url.scheme);
    NSString *path = [[NSBundle mainBundle] pathForResource: @"Info" ofType: @"plist"];
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path];
    NSString *str = [NSString stringWithFormat:@"fb%@",[dict objectForKey: @"FacebookAppID"]] ;

    BOOL result = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation
            ];
    if (result) {
        return YES;
    }

    return [self.instagram handleOpenURL:url];
}

我看到现在已弃用。

iOS(4.2及更高版本)不推荐使用:使用应用程序:openURL:options:相反。产生以下内容。但这并没有被称为。我错过了什么?

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
NSLog(@"%@",url.scheme);
        NSString *path = [[NSBundle mainBundle] pathForResource: @"Info" ofType: @"plist"];
        NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path];
        NSString *str = [NSString stringWithFormat:@"fb%@",[dict objectForKey: @"FacebookAppID"]] ;

        BOOL result = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                              openURL:url
                                                    sourceApplication:sourceApplication
                                                           annotation:annotation
                ];
        if (result) {
            return YES;
        }

        return [self.instagram handleOpenURL:url];
    }

提前感谢您的审核,非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

从iOS9开始,不推荐使用方法“应用程序:openURL:sourceApplication:annotation:”。所以基本上就像@ user2559325建议的那样,这个回调在iOS9以下的设备中不起作用。请参考以下SDK界面。

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

NS_DEPRECATED_IOS(4_2,9_0,“请使用应用程序:openURL:options:”)

答案 1 :(得分:2)

您使用的方法可从iOS 9.0开始提供。它不会在iOS 9.0以下的设备中调用。

此外,它适用于iOS 9+设备。您必须将 LSApplicationQueriesSchemes 键添加到Info plist

  

LSApplicationQueriesSchemes(Array - iOS)指定URL方案   你希望应用程序能够使用canOpenURL:方法   UIApplication类。对于您希望应用使用的每种网址方案   canOpenURL:方法,将其添加为此数组中的字符串。阅读   canOpenURL:关于重要信息的方法描述   声明支持的方案并使用该方法。

     

了解注册URL方案的相反操作   应用程序可以处理,阅读CFBundleURLTypes键的说明。

     

iOS 9.0及更高版本支持此密钥。

答案 2 :(得分:1)

看看这个post。它是快速的,但基本上是相同的实现。

在objective-c中它会是这样的

Item1 <newline>
Description <newline>
LocalFilePathToPicture1<newline>
Item2 <newline>
Description <newline>
LocalFilePathToPicture2<newline>
...

答案 3 :(得分:0)

以下是Swift 3中的简单解决方案。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
   return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}