微信weixin://xxx 分析
2024-10-09 04:59:00
通过weixin://来打开微信客户端:
<a href="weixin://">打开微信</a>
<a href="weixin://dl/business/?ticket=xxx">微信内打开网页</a>
协会说明:
微信跳转入口:
通过反编译,看到weixin://协议的入口定义为WXCustomSchemeEntryActivity
,那就是浏览器访问以weixin为scheme的请求时就会打开微信内的WXCustomSchemeEntryActivity
。
<activity
android:name="com.tencent.mm.plugin.base.stub.WXCustomSchemeEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=".wxpayentry"
android:theme="@style/mm">
<intent-filter>
<data android:scheme="weixin" />
<action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
内部处理
1.获取携带数据
Uri data = getIntent().getData(); if (data != null) {
String scheme = data.getScheme();
String host = data.getHost();
String query = data.getQuery(); Log.i("MicroMsg.WXCustomSchemeEntryActivity", String.format("uri is %s,scheme is %s, host is %s, query is %s", data.toString(), scheme, host, query));
}
2.判断是否合法
// 校验是否非法
if (data != null) {
String uri = data.getScheme() + "://" + data.getHost() + data.getPath();
// qby详情看问末附录
if (!qby.containsKey(uri) && !data.toString().startsWith("weixin://dl/business")) {
return;
}
}
3.进行跳转
根据url对应的地址,调用微信内的路由组件进行跳转。
所有协议
HashMap qyb = new HashMap();
qyb.put("weixin://", 0L);
qyb.put("weixin://dl/stickers", 1L);
qyb.put("weixin://dl/games", 2L);
qyb.put("weixin://dl/moments", 4L);
qyb.put("weixin://dl/add", 8L);
qyb.put("weixin://dl/shopping", 16L);
qyb.put("weixin://dl/groupchat", 32L);
qyb.put("weixin://dl/scan", 64L);
qyb.put("weixin://dl/profile", 128L);
qyb.put("weixin://dl/settings", 256L);
qyb.put("weixin://dl/general", 512L);
qyb.put("weixin://dl/help", 1024L);
qyb.put("weixin://dl/notifications", 2048L);
qyb.put("weixin://dl/terms", 4096L);
qyb.put("weixin://dl/chat", 8192L);
qyb.put("weixin://dl/features", 16384L);
qyb.put("weixin://dl/clear", 32768L);
qyb.put("weixin://dl/feedback", 65536L);
qyb.put("weixin://dl/faq", 131072L);
qyb.put("weixin://dl/recommendation", 262144L);
qyb.put("weixin://dl/groups", 524288L);
qyb.put("weixin://dl/tags", 1048576L);
qyb.put("weixin://dl/officialaccounts", 2097152L);
qyb.put("weixin://dl/posts", 4194304L);
qyb.put("weixin://dl/favorites", 8388608L);
qyb.put("weixin://dl/privacy", 16777216L);
qyb.put("weixin://dl/security", 33554432L);
qyb.put("weixin://dl/wallet", 67108864L);
qyb.put("weixin://dl/businessPay", 134217728L);
qyb.put("weixin://dl/businessPay/", 134217728L);
qyb.put("weixin://dl/wechatout", 268435456L);
qyb.put("weixin://dl/protection", 1073741824L);
qyb.put("weixin://dl/card", 2147483648L);
qyb.put("weixin://dl/about", 1125899906842624L);
qyb.put("weixin://dl/blacklist", 4294967296L);
qyb.put("weixin://dl/textsize", 8589934592L);
qyb.put("weixin://dl/sight", 17179869184L);
qyb.put("weixin://dl/languages", 34359738368L);
qyb.put("weixin://dl/chathistory", 68719476736L);
qyb.put("weixin://dl/bindqq", 137438953472L);
qyb.put("weixin://dl/bindmobile", 274877906944L);
qyb.put("weixin://dl/bindemail", 549755813888L);
qyb.put("weixin://dl/securityassistant", 1099511627776L);
qyb.put("weixin://dl/broadcastmessage", 2199023255552L);
qyb.put("weixin://dl/setname", 4398046511104L);
qyb.put("weixin://dl/myQRcode", 8796093022208L);
qyb.put("weixin://dl/myaddress", 17592186044416L);
qyb.put("weixin://dl/hidemoments", 35184372088832L);
qyb.put("weixin://dl/blockmoments", 70368744177664L);
qyb.put("weixin://dl/stickersetting", 140737488355328L);
qyb.put("weixin://dl/log", 281474976710656L);
qyb.put("weixin://dl/wechatoutcoupon", 562949953421312L);
qyb.put("weixin://dl/wechatoutshare", 18014398509481984L);
qyb.put("weixin://dl/personalemoticon", 4503599627370496L);
qyb.put("weixin://dl/designeremoji", 9007199254740992L);
qyb.put("weixin://dl/sightdraft", 576460752303423488L);
qyb.put("weixin://dl/jumpWxa/", 576460752303423489L);
qyb.put("weixin://dl/offlinepay/", 576460752303423490L);
最新文章
- seajs3.0.0源码分析记录
- css3选择器
- c语言表白程序代码
- IOS设备 UIDevice 获取操作系统 版本 电量 临近手机触发消息检测 (真机亲测可用)
- 关于RTP负载类型及时间戳介绍
- [xsd学习]xsd基本要素
- JavaScript之四种继承方式讲解
- ZOJ 3810 Pretty Poem 分类: ACM 2015-05-17 14:40 83人阅读 评论(0) 收藏
- Linux 网络编程基础(2)-- 获取主机信息
- C++模板:二分查找
- AngularJS 课程
- iOS 获取手机型号,系统版本
- Building Particle Filters and Particle MCMC in NIMBLE
- 百万级别QPS轻量级PHP框架Steeze介绍
- Linux 常用系统工作命令
- 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python
- Springboot的常规属性配置和类型安全配置
- JS-JS创建数组的三种方法
- 不看好运维竖井产品模式,优云打造融合化运维PaaS平台
- django的url分配和url捕获参数
热门文章
- Django认证系统之自带auth_user表操作
- SAP Basis 客户端拷贝
- B. Sleepy Game 博弈搜索
- Gym101635K Blowing Candles
- Spring Boot 教程 (4) - swagger-ui
- Android中的成员变量与局部变量
- SQL——SQL函数
- Python __str__(self)
- [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改
- harbor越权漏洞(CVE-2019-16097)