【问题标题】:How to replace - (BOOL)application: openURL: sourceApplication: annotation:(id)annotation如何替换 - (BOOL)application: openURL: sourceApplication: annotation:(id)annotation
【发布时间】:2016-02-11 23:40:30
【问题描述】:

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

我有这一段可以正常工作。但是需要解决deprecate方法。

-(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 及更高版本)已弃用:使用 application: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];
    }

提前感谢您的审阅,非常感谢您的帮助。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    从 iOS9 开始,方法“application: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, "请使用 application:openURL:options:")

    【讨论】:

      【解决方案2】:

      看看这个post。它速度很快,但实现基本相同。

      在objective-c中会是这样的

      NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
      return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                                openURL:url
                                                      sourceApplication:sourceApplication
                                                             annotation:nil];
      

      【讨论】:

      • 这个逻辑会在哪里执行?如果在 didFinishLaunchingWithOptions 中 URL 不可用,我参考了这篇文章来访问 url 方案但未解决。 link
      • 它将在application:openURL:options: 中。 FBSDK 将访问 plist 并使用应用程序方案调用此方法。
      • 谢谢!我会试一试。但主要是我不知道如何调用 'application:openURL:options:' 方法。
      【解决方案3】:

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

      它也可以在 iOS 9+ 设备上运行。您必须将 LSApplicationQueriesSchemes 键添加到 Info plist

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

      了解注册URL方案的逆向操作 一个应用可以处理,阅读CFBundleURLTypes键的描述。

      iOS 9.0 及更高版本支持此键。

      【讨论】:

      • 不要将链接发布为答案,而是添加一些文本来解释此答案如何帮助 OP 解决当前问题。谢谢
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2021-07-03
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 2012-05-21
        • 1970-01-01
        相关资源
        最近更新 更多