美文网首页
weixin://xxx 分析

weixin://xxx 分析

作者: Android大叔 | 来源:发表于2018-09-07 16:56 被阅读0次

一般大家都知道可以通过weixin://来打开微信客户端,那它的原理是什么呢?

<a href="weixin://">打开微信</a>
<a href="weixin://dl/business/?ticket=xxx">微信内打开网页</a>

协议说明

image

微信跳转入口

通过反编译,看到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>

内部处理

获取携带数据

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));
}

判断是否合法

// 校验是否非法
if (data != null) {
    String uri = data.getScheme() + "://" + data.getHost() + data.getPath();
    // qby详情看问末附录
    if (!qby.containsKey(uri) && !data.toString().startsWith("weixin://dl/business")) {
       return;
    }
}

进行跳转

根据url对应的地址,调用微信内的路由组件进行跳转。

附录

所有协议

版本信息
android:versionCode="1320"
android:versionName="6.6.7"

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);

相关文章

  • weixin://xxx 分析

    一般大家都知道可以通过weixin://来打开微信客户端,那它的原理是什么呢? 协议说明 微信跳转入口 通过反编译...

  • app之间跳转

    NSString *weixinURL = @"weixin_schema://app_id?title=xxx&...

  • 竞品分析报告模板

    ­XXX竞品分析报告 报告版本_编辑日期 状态:文件标签竞品分析报告_XXX [ ]草稿版本2015 ( V1_1...

  • weixin

    版本头7版本尾 更新网址头http://fir.im/Duz更新网址尾 购买头http://k.1ka123.co...

  • weixin

    weixin

  • SVN - 提交文件报错“xxx is scheduled fo

    报错信息 xxx is scheduled for addition, but is missing 原因分析 之...

  • Glide with(xxx)源码分析

    Glide的使用不需要显式的去初始化框架,其内部实现好了初始化。并且实现了图片加载的启动和结束与页面的生命周期绑定...

  • JS常见异常处理

    1. Uncaught TypeError: xxx is not a function 常见原因分析: 首先确保...

  • 申论笔记

    观点+近似意思(词根法)+例子 贴切+回扣观点 综合题:词句解释题:分析XXX,解释XXX,。。。 释义(解释)2...

  • 多开 weixin

    open -n /Applications/WeChat.app/Contents/MacOS/WeChat

网友评论

      本文标题:weixin://xxx 分析

      本文链接:https://www.haomeiwen.com/subject/gqbcgftx.html