iOS 审核规则的每次变动对于iOSer来说都是一次大的震荡,今天我们针对禁用H5加载核心功能给出一种解决办法。 众所周知iOS时可用通过URL Schemes来实现App跳转传值的,不过这种方式正在被逐渐废弃(当然了支付宝依然在用,但是微信支付已经启用了Universial Link)改投更加好用的Universial Link啦。
今天我们就通过使用Universial Link的方式来实现从Safari跳转回App与数据传递
我们先来回顾一下app跳转至safari
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://localhost:8080/users/index"]
options:nil
completionHandler:^(BOOL success) {
NSLog(@"跳转结果:%d",success);
}];
有了App跳转Safari我们来看看今天主角—Universial Link(具体介绍可以自行百度或者参考官网说明) 1 App配置
2 Safari如何在web内跳转App
此处我们本地搭建服务做测试
r.GET("/users/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
"title": "Users",
})
})
r.Run()
下面是对应的html,我们通过点击a标签实现跳转并关闭当前页面
{{ define "users/index.tmpl" }}
<html><h1>
{{ .title }}
</h1>
<a href="https://fisxxh.xx.com/fish_url/pay/?returnKey=&ret=-2" onClick="custom_close()">通过 Universial Link跳转返回</a>
<br>
<br>
<br>
<br>
<p>Using users/index.tmpl</p>
<script language="javascript">
function custom_close(){
setInterval(function(){
window.close();
}, 500);
}
}
</script>
</html>
{{ end }}
3 App内部拦截Universial Link响应
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
if( [userActivity.webpageURL.absoluteString containsString:WXAPPID]){
//从微信跳转进来的
//微信传递的数据 _webpageURL
return [WXApi handleOpenUniversalLink:userActivity
delegate:[YuWeChatShareManager manager]];
}else{
[self.window.rootViewController makeToask:[NSString stringWithFormat:@"通过universial link传递回来的参数:%@",userActivity.webpageURL.query]];
}
return NO;
}
这里需要有一点我们可以在这个返回的连接中添加我们的URL Schemes来标注来区分是哪个对应的group跳转的,例如:微信的跳转或者我们的App自定跳转从而从大类上进行不同的跳转
至此基本上我们就能应对上iOS针对H5规则变更的审核啦,下面我们梳理一下答题思路
1 App开启Universial Link功能 2 定义自身的跳转的URL Schemes 3 App跳转Safari来实现之前内嵌Web的功能,然后按照link的方式来操作,系统会自动识别来跳转回App 4 App内部拦截Universial Link对应的响应做出逻辑判断