iOS微信授权登录中Universal Link(通用链接)的配置 ,解决ios13,ios14微信支付不走回调问题
这里写自定义目录标题
- 简介
- Unuversal Links介绍
- 配置Unuversal Links
- 1.苹果开发者账号打开配置
- 2.XCode工程配置
- 3.配置JSON文件
- 4.后台服务器配置
- 5.微信开放平台配置
- 6.初始化代码
简介
新版本,需要配置Unuversal Links。没办法,填坑工作开始。
Unuversal Links介绍
配置Unuversal Links
1.苹果开发者账号打开配置
2.XCode工程配置
打开Associated Domains开关,将Universal Links域名加到配置上
配置info.plist,“LSApplicationQueriesSchemes“栏添加
3.配置JSON文件
创建一个空白文件(必须纯文本,命名为apple-app-site-association,去除后缀名)。这里建议让后台人员在其本地创建,避免文件传输时,文件自动被更改格式、后缀自动添加等问题。
说明:XXX表示苹果账号的团队ID,OOO表示项目的BundleID。
appID:组成方式是
teamId.yourapp’s bundle identifier
。如上面的 9JA89QQLNQ就是teamId。登陆开发者中心,在Account -> Membership里面可以找到Team ID。
paths:设定你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理。星号的写法代表了可识 别域名下所有链接。
4.后台服务器配置
达到的效果是,浏览器打开这个地址,可以下载这个文件。另外GET请求这个地址,返回文件的JSON内容。这里通过谷歌浏览器的Postman进行试验。
注意,返回的数据,不能存在乱码,否则说明JSON文件有问题。
5.微信开放平台配置
6.初始化代码
// 微信SDK注册,universal link(一般为公司的域名)
在iOS设备中的备忘录中输入APP能识别的链接,然后直接点击此链接,就会直接跳转到你的app了。或是长按,在出现的弹出菜单中第二项是在’XXX’中打开,这也代表着成功:
或是你将要测试的网址在Safari
中打开,在出现的网页上方下滑,可以看到有在”XX”应用中打开
出现菜单:
当点击某个链接,直接可以进我们的app了,但是我们的目的是要能够获取到用户进来的链接,根据链接来展示给用户相应的内容。
我们需要在工程里的实现AppDelegate
里对应的方法:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb])
{ NSURL *url = userActivity.webpageURL;
if (url是我们希望处理的) {//进行我们的处理
} else {[[UIApplication sharedApplication] openURL:url];}
}
return YES;}
注意
前端开发经常面临跨域问题,必须要求跨域,如果不跨域,就不行。
只有当前webview
的URL
域名,与跳转目标URL
域名不一致时,Universal Link
(通用链接)才生效。
按照上面写的配好了,怎么死活打不开呀???
- 支持HTTPS呀,一定要是符合苹果认证的HTTPS证书呀。
- 系统问题,确保iOS9.0以上
- 配置文件问题,apple-app-site-association文件中配置的path和测试用的通用链接不一致,注意是区分大小写的。
- 域名问题,Xcode中配置的域名一不小心写错了。
为毛有的手机成功了,有的手机就不行呢???
- 上面也提到过,因为网络波动有可能会导致部分用户第一次安装时,无法下载apple-app-site-association文件,这个只能引导用户删除重装或者在迭代时修改Associated Domains配置告诉系统重新下载apple-app-site-association文件。
- 另外一种可能是苹果抽风导致,笔者今年年初一碰到过一个蛋疼的问题,从中午一直到下午4点发现重复的删除重装,app也不会请求服务器的apple-app-site-association文件,过了4点之后就好了。当时因为时间特殊并没有深究到底是什么原因导致。
服务器换域名了肿么办???
当Associated Domains添加新的 Domains的之后,在app再次启动的时候抓包发现(不需要删除重装),苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。也就是说Associated Domains发生改变的话,系统是会知道的,这样就可以在迭代的时候删除旧的域名,添加新的域名了。
另外Domains的配置也可以使用通配符,例如:applinks:*.mywebsite.com
全都配置好了,项目也能唤起来了,web页面到底该怎么弄呀???通用链接指向的服务器的页面到底应该是哪个?
之前iOS和安卓用的是同一个网页,也就是说从APP内分享出去的网页,可以被苹果用户和安卓用户同时查看,在这里需要由web童鞋使用js判断当前所处的平台以及其系统。
如果是安卓用户,则显示安卓相关提示页面。
如果是苹果用户,那么分两种:
- 如果是9.0以上的系统,相关的“在APP内打开”按钮的链接配置的就是我们的
Universal Link
(通用链接)了,且该通用链接地址指向的是一个APP下载引导页面,那么当用户安装了APP,即可通过通用链接唤醒APP;如果用户没有安装app,那么就会跳转到通用链接指向的APP下载引导页面,达到最大化的客户导流。 - 如果是9.0以下的系统,则相应的 “在APP内打开”的按钮就会发一个跳转到我们APP
URL Scheme
的重定向,以实现在Safari
中唤醒我们的APP。
- 如果是9.0以上的系统,相关的“在APP内打开”按钮的链接配置的就是我们的
当使用通用链接唤醒APP之后,手机右上角有一个小按钮?
那个小按钮只有(在iOS10.0以下才有)是可以引导用户跳转到Safari
中,名字叫bread crumbs button
(面包屑),当然也去不掉;并且当用户点过这个按钮后,再点击Universal Link
(通用链接)不会直接打开对应的APP。备忘录和safari中都可以打开app,怎么分享到其他app里面就不行了?
未跨域导致的,如:分享到微信的链接是
https://www.mydomain.com/share.html
,然后该网页中的“在app内打开”按钮配置的通用链接为https://www.mydomain.com/index.html
。
跨域的意思是说,通用链接 和 调用通用链接的网页不要使用同一域名。
即如果通用链接域名为www.mydomain.com
,则通用链接所处的网页域名就不能是www.mydomain.com
。微信已经禁用了
Universal Link
(通用链接)
二部分.
如果要是用URL Scheemes,只需要要用到方法一就行啦,微信分享,支付,外链打开app都走的方法一,但是换成Universal Link,需要按照下面方法来。
本人在实际开发中(Universal Link
),需要用到外部链接打开app,并传递一些参数到app,app用到了微信支付,微信qq微博 分享 ,方法一到方法四都全部写上以后,测试的时候发现,iOS13中在复制链接到safari中可以打开相应APP,走的方法三, 但是从微信或其他APP中点击去qq浏览器没问题,走的方法三,点击去safari可以打开app,但是下面4个方法都没有走。后来我把方法三删除,点击去safari ,走的方法四,点击qq浏览器,走的方法一。 复制链接到浏览器和在其他app中选择safari浏览器打开,都走方法四,选择qq浏览器走的方法一。不用方法三的情况下,微信分享和qq浏览器打开走的方法一,其他走的方法四
方法一 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {//com.tencent.xin BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation]; if (!result) { [self getContet:url]; } return result; } |
方法二 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [WXApi handleOpenURL:url delegate:self]; } |
方法三
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{ BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options]; if (!result) { [self getContet:url]; } return result; } |
方法四 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{ if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSString *webpageURL = OCSTR(@"%@",userActivity.webpageURL); if ([webpageURL containsString:@"URL Scheemes"] ) { // 其他如支付等SDK的回调 [[NSNotificationCenter defaultCenter]postNotificationName:@"payWeiChant" object:nil]; return [WXApi handleOpenUniversalLink:userActivity delegate:self]; }else{ [self getContet:userActivity.webpageURL]; } } return YES; } |
微信支付完成不走回调的话需要添加方法四,就可以啦,如果用到微信登录分享支付,外部链接打开app并拿到具体的URL只需要添加方法一,方法二,方法四即可
参考资料
https://blog.csdn.net/qcx321/article/details/103784060
https://www.cnblogs.com/guoshaobin/p/11164000.html
iOS微信授权登录中Universal Link(通用链接)的配置 ,解决ios13,ios14微信支付不走回调问题相关推荐
- iOS 唤起APP之Universal Link(通用链接)
iOS 9之前,一直使用的是URL Schemes技术来从外部对App进行跳转,但是iOS系统中进行URL Schemes跳转的时候如果没有安装App,会提示Cannot open Page的提示,而 ...
- H5通过Universal Link(通用链接)唤起app
问题:之前使用的通过网页打开app都是通过URL scheme打开app,但是我们在开发的过程中遇到过一个奇怪问题,本地的debug的时候都是可以正常打开的,但是打成安装包之后URL scheme没有 ...
- iOS微信授权登录集成
iOS微信授权登录集成 iOS微信授权登录集成,具体的过程参考官方的文档 微信集成官方Demo地址: iOS资源下载 不错的文章: iOS微信登录集成 iOS 微信第三方登录的简单实现 准备工作 1. ...
- android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入
微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...
- 硅谷课堂 12_公众号消息和微信授权登录
硅谷课堂第十二天-公众号消息和微信授权登录 文章目录 硅谷课堂第十二天-公众号消息和微信授权登录 一.公众号普通消息 1.实现目标 2.消息接入 2.1.公众号服务器配置 2.2.验证来自微信服务器消 ...
- 在微信公众号中添加外部的链接图文教程
2017-9-18,长沙,有点闷,有点热. 本教程教大家如何在微信公众号中,添加外部的链接,网络有很多教程,但由于表述不太清楚,出个教程吧.最终实现在微信后台管理平台"原文链接"处 ...
- ios微信登录不上服务器,iOS微信授权登录
首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录.支付等功能还涉及付费,具体申请流程就不再这里说了.到开放平台->管理中心->移动应用->查看应用,确认你 ...
- IOS实现微信授权登录
IOS实现微信授权登录 微信是一个在开发中经常会使用到的平台,比如微信登录.授权.支付.分享.今天我们来看看如何在自己的应用里面集成微信授权. 1.微信授权的定义 微信OAuth2.0授权登录让微信用 ...
- 微信授权登录后,把获取的信息存储到本地数据库中(超详细有用)!
微信授权登录后,把获取的信息存储到本地数据库中(超详细有用)!下面一起来看看吧! <?php namespace Home\Controller; use Think\Controller; c ...
最新文章
- GO语言编程基础-复合类型结构体
- 我都惊了这么多年pytorch还可以这么用
- GOOGLE域名存在漏洞,可以用来建立钓鱼站点(目前已临时被封闭)
- SQL2K数据库开发十一之表操作创建UNIQUE约束
- java队列queue的我觉得很好的使用方式
- T1683 车厢重组 codevs
- Android实现点击通知栏后,先启动应用再打开目标Activity
- yii2组件之下拉框带搜索功能(yii-select2)
- 李松南:智能全真时代的多媒体技术——关于8K、沉浸式和人工智能的思考
- 《深入理解Java虚拟机》读书笔记八
- 项目管理基础:软件开发的方法介绍
- TP引用样式表和js文件及验证码
- 谷歌浏览器怎么重发请求_Googel 浏览器 模拟发送请求工具--Advanced REST Client
- Tomcat 服务器介绍和使用
- STC51-键盘检测
- 数据和access数据的区别_Access处理数据
- 编译nanopi neo 或者M1 uboot 启动SylixOS系统
- java版本号分段比较_java比较版本号大小
- 精益创业实战 - 第3章 制作自己的精益画布
- linux文件l是什么意思,linux 中 我看到lrwxrwxrwx 那个l是什么意思?