iOS上架替换项目中的UIWebview并使用Universal Link(通用链接)

news/2024/7/5 21:27:41
1、上架审核被苹果直接拒绝,要求替换项目中所有的UIWebview
ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.
2、修改项目中的UIWebview

项目中全局搜索UIWebview,自己代码及一些开源第三方用各种方法替换后,准备上架,结果直接被打回还是如下图.
1

3、深层次排查

排查项目包含uiwebview的文件与静态库

打开终端控制台,cd 到项目目录,使用脚本排查 grep -r UIWebView . (脚本包含最后一个标点符号)
执行以上代码,会得到项目中具体包含uiwebview 静态库或者文件的名称及相关代码。

可以直接拍查出哪些静态文件包含uiwebview,发现项目中分享库shareSDK依赖的微信、QQ、微博静态库均包含.

4、替换分享库

替换好后发现,新的分享库需要使用universalLink,

(1)支持Universal Link(通用链接)

登录苹果开发者中心找到对应的APPID,配置Associated Domains,如下:
2

(2)配置指定文件(apple-app-site-association)

创建一个内容为json格式的文件,苹果将会在合适的时候,从我们在项目中填入的域名请求这个文件。这个文件名必须为apple-app-site-association,切记没有后缀名,文件内容大概是这样子:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TeamID.BundleID",
                "paths": [ "/app/*", "/qq_conn/2222222/*"]
            }
        ]
    }
}

appID:组成方式是TeamID.BundleID。TeamID和BundleID就是第一步中的1和2。
paths:设定你的app支持的路径列表,只有这些指定路径的链接,才能被app所处理。的写法代表了可识别域名下所有链接。
"/app/
"是自己定义的路径;
"/qq_conn/22222222/*"需要根据QQ互联平台设置,22222222是QQ互联后台对应应用的APPID。
ps:可先配置微信开放平台和QQ互联平台。
如果上传人员给你的访问路径是:
https://www.baidu.com/.well-known/apple-app-site-association 或
https://www.baidu.com/apple-app-site-association则:
微信开放平台的Universal Link填写是:https://www.baidu.com/app/
QQ互联平台的Universal Link填写是:https://www.baidu.com/qq_conn/22222222/

如设置:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "KV6556Y123.com.bitech.BiPark-E01-Mobile.alpha",
                "paths": [ "/bitechiparkalpha/*"]
            }
        ]
    }
}

applinks:dev.bitechdevelop.com

使用
https://dev.bitechdevelop.com/bitechiparkalpha/就可以跳转

(3)上传该文件

配置好文件后,把该文件给后台开发人员上传就可以了。上传到域名所对应的 根目录或者.well-known目录下,这是为了苹果能获取到你上传的文件。上传完后,让上传人员给你一个访问路径,先访问一下,看看是否能够获取到,当你在浏览器中输入这个文件链接后, 出现下图或者将文件下载下来就可以了或者使用苹果提供的校验校验地址:

2

IIS服务器上apple-app-site-association文件报404、403解决

拓展名:.

MIME类型:application/octet-stream
3

(4)在Xcode开发工具配置Associated Domains

在其中的Domains中填入你想支持的域名,必须以applinks:为前缀,如:applinks:domain
如果上传人员给你的访问路径是:
https://www.baidu.com/.well-known/apple-app-site-association 或
https://www.baidu.com/apple-app-site-association
则Domains中填入:applinks:www.baidu.com
配置好后run起来。
4

(5)shareSDK官网后台自动创建apple-app-site-association,节省我们很多工作量和维护工作

5
按照他官网配置shareSDK自动创建后,在qq互联里上传报错如下分享到qq报错QQ互联验证Universal Link 状态提示应用的universallink配置中不含互联信息
6
按如下配置好后即可解决
7

5、shareSDK微信分享报错
Error Domain=ShareSDKErrorDomain Code=200300 "(null)" UserInfo={SEL=registerApp:universalLink:, error_code=200300}

设置好universal link后微信分享无法拉起,并报错如上…

需要增加一个白名单的配置LSApplicationQueriesSchemes:weixinULAPI


http://www.niftyadmin.cn/n/2815739.html

相关文章

URL转换成IP的过程

【程序人生 编者按】对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑、手机、电视这些设备到底是如何被“连接”起来的。本文通过“我”,一个普通的网络请求的视角,给大家介绍下“我”的工作流程是如何的。人们动动手指&am…

item2实现ssh的免密登录

编写expect脚本 1 新建脚本(脚本位置没有明确要求) touch ssh-info.sh2 脚本内容 #!/usr/bin/expectset timeout 30 spawn ssh -p [lindex $argv 0] [lindex $argv 1][lindex $argv 2] expect {"(yes/no)?"{send "yes\n";exp_conti…

iOS给H5传值JSON中的转义字符\\\被自动移除问题

1、问题 有一个下面的字符串要从iOS传递给H5,该字符串是NSDictionary转化成的JSON字符串 NSString *test "{\"result\":\"{\\\"alipay_trade_app_pay_response\\\":{\\\"code\\\":\\\"10000\\\",\\\"msg\\\":\\…

指针的引用:* x

引用:int &xy;这里的y必须是变量,对x做出的赋值等操作,y的值也会改变。我们可以理解为x是变量y的别名。并且引用只能在定义的时候才能使用。 而指针引用,例如:char* &x y;我们刚遇到的时候可能会理解错误&am…

Docker修改空间大小

2019独角兽企业重金招聘Python工程师标准>>> -Docker修改空间大小 Docker默认空间大小分为两个,一个是池空间大小,另一个是容器空间大小。 池空间大小默认为:100G 容器空间大小默认为是:10G 所以修改空间大小也分为两个…

搞定JVM垃圾回收就是这么简单

上文回顾:《可能是把Java内存区域讲的最清楚的一篇文章》 写在前面 本节常见面试题: 问题答案在文中都有提到 如何判断对象是否死亡(两种方法)。简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用…

用注册机给keil4 注册 ERROR R206: NO REGISTRY ACCESS, ADMINISTRATION RIGHTS REQUIRED

ERROR R206: NO REGISTRY ACCESS, ADMINISTRATION RIGHTS REQUIRED 【翻译】错误R206:没有注册使用权,需要管理员权限。 解决方法: 用“管理员的身份运行”启动keil 才可以注册

React中拓展Jquery组件

1、实现 import $ from "jquery"; ;(function (WB) { WB.extend({ //插件名称wbalert: function() {alert(我是一个插件);}}); })($);export default $2、使用 import WB from "./wbjquery"componentDidMount() {(WB as any).wbalert() }