Android 第三方应用接入微信平台(2)
建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方
面的开销,我最近由于实习需要也在研究这个东西,不过发现网上的相关资
料还是挺少的,这里把我的整个研究情况给出来,希望可以共同学习。
第三方应用接入微信平台(1)
二、第三方应用与微信通信的时序图
2、接收微信的请求信息
前面四步和之前的“1、向微信发送消息”是一样的,不需要重复执行,这里给出来只是为了
流程的整体性。当我们注册后,应用图标会出现在微信聊天的列表中,点击加号即可去添加,
添加后,如果聊天时点击应用图标将会回调第三方应用,如上面时序图所示。这里补充一点,
当我们向微信发消息的媒体类型是appdata类型,即WXAppExtendObject对象时,好友在
收到消息时点击消息,会出现类似的回调过程,需要修改的就是此时onReq被调用时,type
为ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX而不是ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX 。
当我们在onReq方法中接到ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX
类型的消息时,如果想要把响应发回微信,可用如下代码段来实现
可以发现响应的消息对象和发请求是一样的,下面看看效果图
这是聊天窗口,前提是你已经点击加号将应用添加到下面的列表中
此时,如果点击第三方应用,会回调我们设置好的界面
这个界面是自己定义的,你可以在接到微信的请求后自定义响应界面。
说了半天,还没说到onReq方法或是前面讲的onResp方法的由来,
也就是说如果我们想要处理给微信发请求后的回馈或是响应微信的请求
应该怎么做,我们需要下面3步操作:
a. 可以在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个
WXEntryActivity类,该类继承自Activity(当然这个路径是自定义的,随便你自己)
并在manifest文件里面加上exported属性,设置为true,例如:
<activity
android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTop" >
b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送
到微信请求的响应结果将回调到onResp方法
终于出现了这两个神奇的方法,可以看看他们的大致用法
- <span style="font-family:Microsoft YaHei;font-size:18px;"> @Override
- public void onReq(BaseReq req) {
- switch (req.getType()) {
- case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
- goToGetMsg();
- break;
- case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
- goToShowMsg((ShowMessageFromWX.Req) req);
- break;
- default:
- break;
- }
- }</span>
- <span style="font-family:Microsoft YaHei;font-size:18px;"> @Override
- public void onResp(BaseResp resp) {
- int result = 0;
- switch (resp.errCode) {
- case BaseResp.ErrCode.ERR_OK:
- result = R.string.errcode_success;
- break;
- case BaseResp.ErrCode.ERR_USER_CANCEL:
- result = R.string.errcode_cancel;
- break;
- case BaseResp.ErrCode.ERR_AUTH_DENIED:
- result = R.string.errcode_deny;
- break;
- default:
- result = R.string.errcode_unknown;
- break;
- }
- Toast.makeText(this, result, Toast.LENGTH_LONG).show();
- }</span>
c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对
象传递给IWXAPI接口的handleIntent方法:
api.handleIntent(intent, this);
ok,这三步可以结合时序图一起来理解,都可以一一对应的。
最后给出一些注意点,也是容易混淆的,我都写过Demo验证过了,如果大家觉得有
不对的,欢迎指出,欢迎讨论
1、注册是本地注册,且只需要注册一次,但是在发送的时候微信服务器会检测第三方
应用的合法性
2、说白了就是在本地第三方应用将要发送的内容先发给微信进程,微信进程收到后再
将消息发给自己的微信好友
3、卸载或者反注册后,第三方应用将不会出现在本机微信的可添加应用列表中
4、使用微信开放平台发送的媒体对象中,网页,音频和视频只能是网络URL,图片可
发送本地路径,本地字节数据,网络URL,文件可以发送本地字节数据和本地路径,
附带在媒体对象中的字节数组,微信默认会是点击则给出下载界面,下载后存储的
路径是在/sdcard/Tecent/MicroMsg/本机微信帐号(一般是一串字母数字的组合体)/attachment
文件夹下,这个路径不需要自己去记录,微信会在媒体对象的filepath字段中记录,此时一定注意的是
当你响应微信的show请求时,媒体对象中的filedata字段是为空的,即使你在发送的时候附带在了这个
字段中,如前面所说,只能用filepath这个字段。
如果要自行处理只能是appdata类型数据,理由下面给出:
appdata类型的对象唯一特殊点就只是告诉微信这个消息点击时需要调用第三方应用,
而其他类型的媒体对象被点击时所显示的是微信的默认页面
5、微信根据transaction字段决定消息在聊天框中的表现以及点击后的响应,只有
appdata被点击时可以调用第三方应用的进程,所触发的方法是实现了IWXAPIEventHandler
接口的类的onReq方法,类型是ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX
而在微信中和好友聊天时点击第三方应用图标所所触发的方法是实现了IWXAPIEventHandler
接口的类的onReq方法,类型是ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX
6、微信会根据第三方应用是否注册来给出应用安装的信息,比如传给微信好友一个音频消息时,
当好友点击那个消息,微信会以一个WebView来load音频消息中的URL,不过在此前会在URL
后面附加一些微信定义的信息,其中就会包括一个字段是isInstalled
有关微信包装后的URL的具体格式,我们可以将网络断开,然后再去点击,这时自然就出现了那个
经典界面,你也就可以看到URL的真面目了
因为我自己写的demo都在实习结束后丢失了,所以给一个官方的demo下载,如果有不清楚的可以交流
微信测试demo
注:本博客的原创文章欢迎转载,但是请注明转载地址,否则将追究法律责任,
谢谢合作,希望共同学习。
- 上一篇Android 第三方应用接入微信平台(1)
- 下一篇【Android】 PopupWindow使用小结
- 顶
- 12
转载于:https://www.cnblogs.com/xgjblog/p/4152807.html
Android 第三方应用接入微信平台(2)相关推荐
- Android 第三方应用接入微信平台(1)
关键字:微信开放平台 Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约 ...
- Android 第三方应用接入微信平台(2)
关键字:微信开放平台 Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下,毕竟可以利用微信 建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方 面的 ...
- android第三方应用,Android 第三方应用接入微信平台研究情况分享(一)
微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发 ...
- android微信第三方登陆混淆,Android 第三方应用接入微信平台研究情况分享(二)
微信平台开放后倒是挺火的,许多第三方应用都想试下,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发现网上的相关资料 ...
- 第三方SDK接入--微信
第三方SDK接入–微信 说明 由于公司的需求,app需要使用微信登录以及分享到微信等功能,近期对微信的第三方登录.分享功能进行了少许研究,并记录如下. 注意点: 1. 需到"微信开放平台&q ...
- 第三方App接入微信登录 解读 (微信开放平台)
http://www.cnblogs.com/linjunjie/p/6249989.html 微信开放平台 和 微信公众平台 概念不同. 1.首先需要注册微信开放平台,然后获取开发者认证.审批 ...
- 微信开发 - 第三方网站接入微信登录、微信支付时,本地 redirect_uri 参数错误导致无法调试的解决方案(微信开放平台)完美解决每次都需要部署到线上测试,在本地使用本地 ip 就能轻松调试
问题描述 网上的教程都非常乱且无效,本文将站在新手的角度,超级详细的讲解. 本文提供 在微信开放平台,接入微信登录和微信支付时,本文无法调试 redirect_uri 回调错误 的解决方案, 仅需几个 ...
- android实现第三方支付,Android开发第三方APP接入微信支付
前言 在APP中接入微信支付其实很简单,大部分工作主要都是后台完成,客户端只需要调用后台,得到后台返回的字符串后在调用微信的api即可.但是会有些坑,稍不注意就会掉坑里,下面会讲到. 一. 接入流程 ...
- Android第三方登陆之微信Wechat、WeiXin篇(原生登陆授权)
移动应用微信登录开发指南 准备工作 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并 ...
- 详解如何进行第三方App接入微信登录
微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权 ...
最新文章
- scp 命令 路径_基于SSH的文件传输:scp命令
- 小程序使用富文本完整代码及示例图
- ASP.NET Web Pages – 帮助器简介
- mvc登录实例 mysql_spring mvc + mybatis + mysql 调整的一个简单的登录例子
- linux下查看GPU版本和详情信息 CUDA版本信息 anaconda版本信息
- Linux下基于官方源代码RPM包构建自定义MySQL RPM包
- if语句输入月份判断季节_C语言循环及条件语句
- 网络推广——网络推广优化基础问题必须明确
- 机器视觉:Caffe Python接口多进程提取特征
- HTML编码问题导致的乱码
- How do I enable core dumps for everybody
- 华为轮值董事长郭平2020全联接大会主题演讲:永远面向阳光,阴影甩在身后
- Unreal Engine 4 基于网格的水面模拟实现
- Keil综合(03)map文件全解析
- idea 快速导入实现父类方法_网站seo优化方法,实现快速排名!
- python画roc曲线需要什么数据,Python ROC曲线绘制
- mongodb的连接和开启安全验证
- python安装旧版本、python历史版本下载
- scratch小游戏脚本大全
- Kafka工具--雅虎CMAK
热门文章
- winform 项目获取app.config 中appSettings节点数据
- 帮你轻松理解Commonjs、AMD、CMD、ES6的区别
- 给页面加上loading加载效果
- Visual Studio 2019密钥
- Linux下编译protobuf
- 有读二本国防计算机学校,好的二本计算机大学
- python中rawinput用法_Python 中 input()用法 以及与raw_input() 的区别
- python字符串操作方法_python字符串常用操作方法
- springboot日志管理_最近Springboot有点火,只是因为面试问的频率高吗?
- redis练习-模拟手机验证码的发送