DCloud_App_Array
DCloud_App_Array
  • 发布:2014-09-24 16:08
  • 更新:2020-10-29 09:29
  • 阅读:63021

iOS平台设置UrlSchemes,实现被第三方应用调用

分类:HTML5+

如果你的App想要在手机系统中注册一个scheme协议,方便其他App调用你的App,那么可以根据本文设置。

设置UrlSchemes

打开项目的manifest.json文件,切换到“代码视图”

  • 5+App项目
    在manifest.json文件的"plus"->"distribute"->"apple"下添加urltypes节点数据如下:
    "plus": {  
    "distribute": {  
        "apple": {  
            "urltypes": [  
                    {  
                        "urlidentifier":"com.xxx.test",  
                        "urlschemes": [  
                            "test"  
                        ]  
                    }  
            ],  
            //...  
        },  
        //...  
    },  
    //...  
    },  
    //...
  • uni-app项目
    把上面的urltypes节点数据放到manifest.json的"app-plus"->"distribute"->"ios"节点下

值域说明:urlidentifier为标识,可自定义,格式为反向域名格式;
urlschemes为要指定的scheme值,字符串数组,使用小写字母,可设置多个。 比如设置为test,那么其他App呼起你的app的scheme协议就是test://。

保存后提交App云端打包生效

浏览器中通过href启动应用

安装应用后,我们可以在html页面中,通过href直接调用应用:

<a href="test://abc">test:<a><br/>

5+ APP中处理urlscheme启动传递的参数

在其它应用中通过href调用Url Scheme传递过来的值,可以通过plus.runtime.arguments获取
其值为完整的urlscheme字符串,如上面href的值启动应用后获取的plus.runtime.arguments值为“test://abc”。
代码示例如下:

document.addEventListener('plusready',function(){  
    checkArguments();  
},false);  
// 判断启动方式  
function checkArguments(){  
    console.log("plus.runtime.launcher: "+plus.runtime.launcher);  
    var args= plus.runtime.arguments;  
    if(args){  
        // 处理args参数,如打开新页面等  
    }  
}  
// 处理从后台恢复  
document.addEventListener('newintent',function(){  
    console.log("addEventListener: newintent");  
    checkArguments();  
},false);

uni-app中处理urlscheme启动传递的参数

在App.vue 中onLaunch 里获取

onLaunch: function() {  
      plus.globalEvent.addEventListener('newintent', (e)=>{  
            var args= plus.runtime.arguments;  
        if(args){  
                // 处理args参数,如直达到某新页面等  
        }  
        });  
}   

在App.vue的onShow里获取

onShow: function() {  
    setTimeout(function(){   
      var args= plus.runtime.arguments;  
    if(args){  
        // 处理args参数,如直达到某新页面等  
    }  
   },10);   
}

HBuilder/HBuilderX自带真机运行基座的UrlSchemes为"hbuilder://",方便开发者调测。

如果是离线打包,自行在原生工程中配置

iOS平台设置UrlSchemes白名单
Android平台设置UrlSchemes,实现被第三方应用调用

21 关注 分享
dreamboycx Trust 2640500479@qq.com 809868138@qq.com 知行合一 dipper echoer hylong 1870392795@qq.com 陈锐 491459869@qq.com 小诺小言 34662366@qq.com 306816224@qq.com skysowe 123ABC@163.com Smart900zhang ikaze_email@163.com aliang888 getcww 诸葛逍遥

要回复文章请先登录注册

风云杭州

风云杭州

微信小程序跳转过来也是这种方法吗?貌似不太行
2020-10-29 09:29
叶戈尔

叶戈尔

plus.runtime.arguments
android下可以正常获取数据,ios无法获取
HBuilderX:2.8.3、2.8.4_alpha
2020-08-14 18:23
darrenblog

darrenblog

回复 785570954@qq.com :
我也有这个问题,是因为app处于杀死状态下,如果通过scheme协议打开APP时,没有走这3个方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

为什么没有走这3个方法呀,
2020-05-21 16:07
webwebweb

webwebweb

我iOS调用第三方也是出现白屏
2020-04-26 11:55
webwebweb

webwebweb

iOS我调用第三方打开后也出现白屏了
2020-04-26 11:52
785570954@qq.com

785570954@qq.com

回复 785570954@qq.com :
已解决 https://ask.dcloud.net.cn/question/95040
2020-04-25 18:01
785570954@qq.com

785570954@qq.com

回复 chenhq :
你好,大佬,咨询一下,为什么我的uniapp在iosAPP环境下,浏览器网页通过scheme协议打开APP时,app读取不到参数
2020-04-25 16:45
chenhq

chenhq

```
// #ifdef APP-PLUS
setTimeout(function(){
var args= plus.runtime.arguments;
if(args){
if (getUrlKey(args, "path")) {
let url = args.substring(args.indexOf("?path=") + 6, args.length);
url = url.replace("&", "?");
uni.navigateTo({
// 参考文档 https://ask.dcloud.net.cn/article/409
// 获取从其他应用进入本应用的参数path。其他应用访问本应用地址:<a href="hbuilder://?name=test&path=/pages/details/details">文章详情</a>
url: url
});
}

// 用完参数之后清空,否则每次唤醒app都会调用上面的方法
plus.runtime.arguments = null;
plus.runtime.arguments = '';
// 处理args参数,如直达到某新页面等
}
}, 500);
// #endif
```
2020-04-11 14:15
chenhq

chenhq

回复 chenhq :
完整代码参考:
// #ifdef APP-PLUS
setTimeout(function(){
var args= plus.runtime.arguments;
if(args){
if (getUrlKey(args, "path")) {
let url = args.substring(args.indexOf("?path=") + 6, args.length);
url = url.replace("&", "?");
uni.navigateTo({
// 参考文档 https://ask.dcloud.net.cn/article/409
// 获取从其他应用进入本应用的参数path。其他应用访问本应用地址:<a href="hbuilder://?name=test&path=/pages/details/details">文章详情</a>
url: url
});
}

// 用完参数之后清空,否则每次唤醒app都会调用上面的方法
plus.runtime.arguments = null;
plus.runtime.arguments = '';
// 处理args参数,如直达到某新页面等
}
}, 500);
// #endif
2020-04-11 14:12
chenhq

chenhq

回复 chenhq :
已解决,使用setTimeout时间调大一点,我写的是500
2020-04-11 14:10