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方法

终于出现了这两个神奇的方法,可以看看他们的大致用法

[java] view plaincopy

  1. <span style="font-family:Microsoft YaHei;font-size:18px;">  @Override
  2. public void onReq(BaseReq req) {
  3. switch (req.getType()) {
  4. case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
  5. goToGetMsg();
  6. break;
  7. case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
  8. goToShowMsg((ShowMessageFromWX.Req) req);
  9. break;
  10. default:
  11. break;
  12. }
  13. }</span>

[java] view plaincopy

  1. <span style="font-family:Microsoft YaHei;font-size:18px;">  @Override
  2. public void onResp(BaseResp resp) {
  3. int result = 0;
  4. switch (resp.errCode) {
  5. case BaseResp.ErrCode.ERR_OK:
  6. result = R.string.errcode_success;
  7. break;
  8. case BaseResp.ErrCode.ERR_USER_CANCEL:
  9. result = R.string.errcode_cancel;
  10. break;
  11. case BaseResp.ErrCode.ERR_AUTH_DENIED:
  12. result = R.string.errcode_deny;
  13. break;
  14. default:
  15. result = R.string.errcode_unknown;
  16. break;
  17. }
  18. Toast.makeText(this, result, Toast.LENGTH_LONG).show();
  19. }</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

注:本博客的原创文章欢迎转载,但是请注明转载地址,否则将追究法律责任,

谢谢合作,希望共同学习。

12
时间: 2024-10-08 06:10:38

Android 第三方应用接入微信平台(2)的相关文章

Android 第三方应用接入微信平台(1)

关键字:微信开放平台   Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可 以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西, 不过发现网上的相关资料还是挺少的,这里把我的整个研究情况给出来,希 望可以共同学习. 一.微信SDK中会用到主要类的类图 上面这张类图中显示的是与微信通信过程中的请求类和响应类,第三方应用通过他们 附带的message字段来携带消息传输给微

Android 第三方应用接入微信平台研究情况分享

微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的 最近由于实习需要也在研究这个东西,这里把我的整个研究情况给出来 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发现网上的相关资料还是挺少的,这里把我的整个研究情况给出来,希望可以共同学习. 一.微信SDK中会用到主要类的

[转] Android进阶——安卓接入微信,获取OpenID

PS: sendAuthRequest拿到code,通过code拿到access_token和openId,access_token可以拿到用户的信息 http://blog.csdn.net/haovip123/article/details/50503176 需求:接入微信支付,需要获取 OpenID. 安卓接入微信指南:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&

第三方App接入微信登录 解读(转)

转自http://blog.csdn.net/luoyan973387349/article/details/49815225 , 更多详细资料请参考原文 最近在做一个微信登录功能,发现腾讯的API文档写的实在是让人摸不着头脑,也没有搜到很详细的能让人参考的文章,借此把自己的一点儿使用心得与大家分享,欢迎指正其中的不足之处,谢谢! 准备工作 1.在微信开放平台https://open.weixin.qq.com/注册成为开发者. 2.在“管理中心”中创建一个移动应用,需“应用名称.简介.及28*

第三方App接入微信登录

微信登录接入 微信登录遵循协议Aouth2.0中的授权码模式 我们来看一下Aouth2.0中的授权码模式是怎么定义的: 授权码模式(authorization code)是功能最完整.流程最严密的授权模式.它的特点就是通过客户端的后台服务器,与"服务提供商"的认证服务器进行互动. 它的步骤如下: (A)用户访问客户端,后者将前者导向认证服务器. (B)用户选择是否给予客户端授权. (C)假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redi

Android 第三方QQ、微信、微博登录分享

最近弄了下QQ微信微博的登录分享,在这里做一下总结,以下登录分享使用的都是官方的最新SDk. 首先是QQ的登录: 1.第一步肯定是先去开放平台注册应用,这里步骤就不详细说了 http://open.qq.com/ 2.将下载好的jar包导入工程,在AndroidManifest文件里面注册SDK里面提供的Activity <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="

友盟分享——Android App接入微信开放平台注意事项

一.Android第三方应用接入微信开放平台的注意事项: 1. 到微信开放平台官网申请正式的AppID(需通过审核),要填写包名.app签名的md5值.至于如何获取app签名信息,官方提供签名包apk (http://open.weixin.qq.com/download/sdk/gen_signature.apk) 2. 如果只是测试或debug,可以用临时AppID(到官网申请但不需要通过审核). 二.如何运行SDK Demo?("分享到好友"之后没反应)自己的App呢? 1. E

Android App接入微信开放平台注意事项

一.Android第三方应用接入微信开放平台的注意事项: 1. 到微信开放平台官网申请正式的AppID(需通过审核),要填写包名.app签名的md5值.至于如何获取app签名信息,官方提供签名包apk (http://open.weixin.qq.com/download/sdk/gen_signature.apk) 2. 如果只是测试或debug,可以用临时AppID(到官网申请但不需要通过审核). 二.如何运行SDK Demo?(“分享到好友”之后没反应)自己的App呢? 1. Eclips

微信平台ASPX高级定制开发(一):如何使用C#建立响应微信接入和自动回复的代码

微信平台不解释了,如果不了解的百度一下下,如果不会用微信,请自宫,光盘重启电脑,打开CMD输入Format C:.网上有很多针对企业级的高级定制ASPX开发,写得草草了事,很多男人干事都草草了事,这可不行,您不懂小伙伴们的心情.初学者总是希望无码,即不要太多代码就能运行起来的示例,本人保证贴出来的代码全是可运行的,代码虽然有点干瘪,但给你想象和改造的空间很大,感觉对于微信平台是真正的互联网技术改造传统行业,为什么? 找度大娘(我的QQ26959368问我,别发邮件收不到!). 本代码实现了接入微