【问题标题】:Universal Links IOS9通用链接IOS9
【发布时间】:2015-12-15 02:03:39
【问题描述】:

似乎 Apple 正在放弃通过链接打开应用程序的自定义方案机制。
使用自定义方案,如果您要尝试打开应用注册的自定义方案,应用程序将打开并且 javascript 函数 handleOpenURL 将处理调用。

worklight 是否支持 IOS9 中新的“通用链接”方法?

【问题讨论】:

    标签: ios cordova ibm-mobilefirst


    【解决方案1】:

    在我们的项目中,worklight 没有为开箱即用的 Universal Links 功能触发 handleOpenURL 函数。

    所以,我们使用了以下解决方案:

    1) 原生层插件

    MyAppDelegate+UniversalLinksPlugin.h

    #import "rr.h"
    
    
    @interface MyAppDelegate (UniversalLinksPlugin)
    
    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler;
    
    @end
    

    MyAppDelegate+UniversalLinksPlugin.m

    #import "rr.h"
    #import <objc/runtime.h>
    
    @implementation MyAppDelegate (UniversalLinksPlugin)
    
    - (BOOL)application:(UIApplication *)application
    continueUserActivity:(NSUserActivity *)userActivity
     restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    
        NSLog(@"Universal links plugin: starting application launch handling.");
        // ignore activities that are not for Universal Links
        if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb] || userActivity.webpageURL == nil) {
            return NO;
        }
    
        NSString* url = [userActivity.webpageURL absoluteString];
        NSLog(@"Universal links plugin: the following url is used for the application launch %@", url);
    
        NSMutableDictionary *data = [[NSMutableDictionary alloc] init];
        [data setValue:url forKey:@"url"];
        [[WL sharedInstance] sendActionToJS:@"handleURL" withData:data];
    
        return YES;
    }
    
    @end
    

    2) config.xml 更新:

    <feature name="UniversalLinksPlugin">
       <param name="ios-package" value="UniversalLinksPlugin"/>
    </feature>
    

    3) iphone/js/main.js 更新:

    /**
     * UL links handling
     */
    document.addEventListener("deviceready", function() {
        WL.App.addActionReceiver ("ULReceiver", function(received) {
            if (received.action === "handleURL") {
                WL.Logger.debug('Inside handle URL action receiver. Provided url: ' + received.data.url);
                handleOpenURL(received.data.url);
            }
        });
    
    }, false);
    

    就是这样。我真的希望这会对某人有所帮助)

    【讨论】:

      【解决方案2】:

      Universal Linking 未作为 iOS 9 支持的一部分进行测试。如果需要链接,请暂时继续使用自定义方案选项。

      编辑:测试并发现可以正常工作。

      【讨论】:

      • 什么时候也调用了同一个handleOpenURL函数?
      猜你喜欢
      • 2016-05-22
      • 1970-01-01
      • 2016-01-13
      • 2017-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多