解决在手机微信中由于安全策略导致无法唤醒app的问题
2018-07-28 本文已影响0人
e93a88ffeabd
解决在手机微信中由于安全策略导致无法唤醒app的问题
背景:
这周一直在做h5唤醒app的功能,当测试到微信的时候发现在微信内部使用ip地址打开h5的时候无法触发唤醒机制,经查原因是由于在微信内部存在安全机制,唤醒app属于有安全限制的行为,只有在微信白名单中的ip、域名才可以触发唤醒行为。所以对于普通开发者来说,仅仅使用个人pc的ip地址或者未在白名单中的ip、域名均无法唤醒app
解决方法:
- 既然微信有这个安全策略,那么我们只能使用在白名单中的域名或ip地址进行触发(不知道都有哪些域名或ip在白名单中怎么办?那就试试腾讯自家的域名呗~tencent你值得拥有!)
- 那么问题就来了,如何将这个自定义的假域名与本地运行的项目进行映射呢?
使用nginx配置假域名
server {
listen 80;
server_name test.tencent.com; # 配置的假域名,以test.tencent为例
location / {
proxy_pass http://127.0.0.1:3000; # 假域名上的所有请求都反向代理到本地node服务上
# 具体代理的端口依据自身本地服务监听的端口而定
}
}
配置本地host文件
127.0.0.1 test.tencent.com
这样配置完成后,我们可以保证在pc浏览器上输入test.tencent.com可以正常的显示本地运行的服务
pc浏览器输入url -> 进入host文件 -> 当项目内有数据请求时 -> nginx转发到本地服务 -> 正常运行
在手机上也可以访问自定义域名
我们最终的目是让手机也可以实现上面的功能,如何做呢?这里提供一种思路,既利用抓包工具作为中转服务器将手机的请求进行拦截代理到本地项目所起的服务上
在这里先解释下抓包工具的工作原理:
- 在需要抓包的设备上启动一个服务
- 代理该设备上的所有请求实现抓包
- 抓包工具再模拟一个与被抓请求相同的请求发送到真正想发送的服务器上
那么利用抓包工具的这个特性,我们就可以将手机的请求代理到抓包工具上,由抓包工具进行转发实现上述功能(如果不经过抓包工具这层的话,当在手机输入自定义域名后,手机并没有host配置这种东西,所以根本没法链接到pc上的本地服务)
- 这里我选择了fiddler作为抓包工具,具体安装请自行百度,这里只说结果,fillder启动后默认的服务端口是8888
[图片上传失败...(image-eed46d-1532763557500)] - 保证手机与pc在同一网段下(一般的做法是都连同一个wifi)
- 手机设置wifi代理到
pc的ip地址:8888
就大功告成了
通过以上几个步骤就可以让手机访问我们自定义的假域名从而通过微信安全机制执行app唤起功能
手机浏览器输入url -> 抓包工具拦截请求 -> 抓包工具模拟请求并重新发出 -> 进入host文件 -> 当项目内有数据请求时 -> nginx转发到本地服务 -> 正常运行