DCloud_App_Array
DCloud_App_Array
  • 发布:2019-09-18 15:44
  • 更新:2022-11-30 11:23
  • 阅读:86604

iOS云打包如何设置通用链接等Capabilities配置

分类:HTML5+

HBuilderX2.3.0开始云端打包支持配置XCode中的Capabilities
如下XCode配置

打开项目的manifest.json文件,在源码视图中进行配置

  • 5 APP项目
    在"plus" -> "distribute" -> "apple"添加"capabilities"节点
  • uni-app项目
    在"app-plus" -> "distribute" -> "ios"添加"capabilities"节点
        "capabilities": {  
            "entitlements": {   // 合并到工程entitlements文件的数据(json格式)  
            },  
            "plists": {         // 合并到工程Info.plist文件的数据(json格式)  
            }  
        },

其中entitlements数据(json)将转换成XCode工程中entitlements文件的数据(字典格式)
plists节点数据将转换成XCode工程中Info.plist文件的数据(字典格式)

通用链接(Universal Link)

以下文档已过期,适用于:本地离线打包或者由于某种原因你需要用传统的方式:私有化部署服务器来托管apple-app-site-association文件创建通用链接。

推荐使用:一键生成iOS通用链接

Universal Link是苹果在WWDC 2015上提出的iOS 9的新特性之一。此特性类似于深层链接,并能够方便地通过打开一个Https链接来直接启动您的客户端应用(手机有安装App)。对比起以往所使用的URL Sheme, 这种新特性在实现web-app的无缝链接时能够提供极佳的用户体验。
使用前请阅读苹果官方文档
使用通用链接(Universal Link)必须要有域名,下的配置中将要用到

第一步:开启Associated Domains服务

登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启Associated Domains服务


开启Associated Domains服务后需要重新生成profile文件,提交云端打包时使用

第二步:配置Associated Domains(域名)

原生XCode环境配置通用链接域名(本地离线打包配置,使用HBuilderX云端打包跳过)


使用HBuilderX云端打包时在manifest.json中配置域名
在"plus" -> "distribute" -> "apple" -> "capabilities" -> "entitlements"节点(uni-app项目在"app-plus" -> "distribute" -> "ios" -> "capabilities" -> "entitlements")下添加"com.apple.developer.associated-domains"字段,字段值为字符串数组,每个字符串为要关联的域名

    "capabilities": {  
        "entitlements": {  
            "com.apple.developer.associated-domains": [  
                "applinks:demo.dcloud.net.cn"  
            ]  
        }  
    }

其中demo.dcloud.net.cn是应用通用链接的域名(这里不要包含path),请修改为自己应用要使用的域名
保存后提交云端打包生效。

HBuilderX中自带的默认真机运行基座HBuilderX注册的通用链接为:https://demo.dcloud.net.cn/ulink/

第三步:服务器配置apple-app-site-association文件

需要在上面域名对应的服务器上放apple-app-site-association文件。
apple-app-site-association文件配置如下:

{  
    "applinks": {  
        "apps": [],  
        "details": [  
            {  
                "appID": "G56NU654TV.io.dcloud.HBuilder",  
                "paths": [ "/ulink/*"]  
            }  
        ]  
    }  
}
  • apps
    必须对应一个空的数组
  • appID
    由前缀和ID两部分组成,可以登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID查看
  • paths
    对应域名中的path,用于过滤可以跳转到App的链接,支持通配符*,?以及NOT进行匹配,匹配的优先级是从左至右依次降低

注意:不要直接拷贝使用上面的示例,必须根据自己应用的配置修改
把配置好的apple-app-site-association文件上传到你自己的服务器,确保通过https://demo.dcloud.net.cn/.well-known/apple-app-site-association可访问。
其中demo.dcloud.net.cn为上面配置的域名
应用安装后会通过访问上面的url向系统注册应用的通用链接。

推荐方案:将apple-app-site-association文件部署到,免费的阿里云版unicloud的 前端网页托管

客户端处理通用链接

可通过5+ API的plus.runtime.launcher判断应用启动来源,如果其值为"uniLink"则表示通过通用链接启动应。
这时可通过5+ API的plus.runtime.arguments获取启动参数,通用链接启动的情况将返回完整的通用链接地址。

注意事项

  • apple-app-site-association文件不需要.json后缀
  • 对apple-app-site-association文件的请求仅在App第一次启动时进行,如果此时网络连接出了问题apple会缓存请求,等有网的时候再去请求,如果没有请求此文件通用连接会失效
  • iOS 9.2开始,在相同的domain内Universal Links不生效,必须要跨域才生效

微信配置通用链接参考:https://ask.dcloud.net.cn/article/36445

4 关注 分享
Hal74 5***@qq.com x***@163.com 老醒

要回复文章请先登录注册

c***@chenbang-inc.com

c***@chenbang-inc.com

回复 9***@qq.com :
写的可以了,只是你可能以前没接触这些。
2022-11-30 11:23
苍山暮色烟雨迟

苍山暮色烟雨迟

H5唤醒app 写哪个地址? 看的迷了
2022-08-22 18:09
9***@qq.com

9***@qq.com

教程写的真尼玛一言难尽
2022-08-22 14:03
DCloud_App_Array

DCloud_App_Array (作者)

回复 1***@qq.com :
是的
2022-06-21 17:58
1***@qq.com

1***@qq.com

"确保通过https://demo.dcloud.net.cn/.well-known/apple-app-site-association可访问",是必须要有这个.well-known吗?
2022-06-21 15:34
大兵红

大兵红

回复 b***@163.com :
你好,能加下QQ吗,想请教下问题
2022-05-06 15:32
b***@163.com

b***@163.com

回复 b***@163.com :
参数搞定 了,就在ios```https://www.a.b.com/app/pages/good/index```
adroid```abcdefg://pages/good/index```
用法
//唤醒android app
const androidScheme = "abcdefg://";
//唤醒ios app
const iosApplink = "https://www.a.b.com/app";
```
async getArguments() {
// 处理第三方传入的参数
console.log("####################plus.runtime", plus.runtime)
const args = plus.runtime.arguments || '';
console.log("android**********************************", args)
if (args !== '') {
let url = '';
if (args.indexOf(config.androidScheme) !== -1) {
url = args.substr(config.androidScheme.length, args.length);
} else if (args.indexOf(config.iosApplink) !== -1) {
url = args.substr(config.iosApplink.length, args.length);
}
// 分享使用一次后清空
plus.runtime.arguments = null;
plus.runtime.arguments = '';
console.log("android**********************************url", url)
if (url != '') {
uni.reLaunch({
url: url
})
}
}
}
```
2022-03-24 21:04
b***@163.com

b***@163.com

1.ios UDID在你电脑上安装Itunes(最新版本就好,DCloud你找到的文章说啥你都不管直接最新就好),(大约是只能过户和控制两个菜单下面有个手机标志,点击一下,出来了你的的手机,点击摘要,吧序列号点击几下你会看到各种号码,其中之一就是UDID)。
2.苹果开发者账号登录进去,新增手机,你如果是已经有描述文件了,名字点击进去,在下面找到拟新增的手机勾上。保存后,你就可以吧描述文件下载下来,(有一列有很多复选框的页面,好像是项目名点进去吧下面Associated Domains勾上),在云打包后,你的测试ios就能在手机上安装基座了,我之前也是安装不上,就是描述文件这里要进去吧新增手机给勾上,然后下载(p12不用动)
2022-03-24 18:34
b***@163.com

b***@163.com

清单文件```"capabilities" : {
"entitlements" : {
"com.apple.developer.associated-domains" : [ "applinks:www.a.b.com" ]
}
}```

至于你们上面看到的ulink,说实话我就在apple-app-site-association里面的paths配置了一个app,可能是用来区分参数的吧,可能你有几个分享,我吧这个理解为前缀,目前我就一个.
2022-03-24 18:14
b***@163.com

b***@163.com

根目录就行,域名这个都配置一样就好了,比如我清单文件里面的applinks配置的是applinks:www.a.b.com,重点来了:
- 1(宝塔里面www.a.b.com文件夹里面就是apple-app-site-association文件nginx配置) ```
listen 80;
listen 443 ssl http2;
server_name www.a.b.com;
root /www/wwwroot/www.a.b.com/;
```
- 2(apple-app-site-association文件)
```
{
"applinks": {
"apps": [],
"details": [
{
"appID": "XXXXXXX.com.xxxx.xxxx",
"paths": [ "/app/*"]
}
]
}
}
```
- 3使用
```
window.location.href = 'https://www.a.b.com/app/';
```
目前我这样是跳转成功了,前提是云打包、云打包、云打包,我吃了没云打包的很多亏,因为总不生效,很离谱,一云打包,就好了。我还没搞定传参。
2022-03-24 18:05