`

Android平台第三方应用分享到微信开发

 
阅读更多

转于:

---------------------------------------------------------------------

http://www.chawenti.com/articles/13946.html

 

--------------------------------------------------------------------------------------

 

一、申请APPID

微信公共平台和微博分享一样,也需要申请一个ID,来作为调起微信、分享到微信的唯一标识。

申请微信APPID可以到微信平台http://open.weixin.qq.com/app/list/?lang=zh_CN上申请。具体的申请流程网站上有很详细的介绍,我这里就仅列出一些注意事项:

(1)申请APPID时的应用名字审核通过之后将不允许更改,所以申请时的应用名字一定要提前确定好。微信官方也有详细说明,如下图:

    

(2)应用签名问题:应用签名一定要填写正确,否则会出现第三方应用拉不起微信的情况。

首先可以下载微信官方提供的一个签名生成工具,打开这个应用输入第三方应用的包名就能拿到用于微信的应用签名。但是这里也有需要注意的地方:

1.我们平时开发使用的keystore是C:Usersliwei.android debug.keystore,而发布正式版肯定会有一个特定的keystore(比如:XXX.keystore)。因此,我们很有必要申请两个APPID,一个用于开发测试用,另一个用于正式发版。这样能够更方便平时的开发。

2.假如想使用别人的APPID或者运行别人的demo,可以按下面的步骤来做:

在eclipse中打开window—>preferences—->Android—->build如下图所示:

将别人的C:Usersliwei.android debug.keystore(微信提供的例子中有带这个debug.keystore,所以想运行微信提供的例子要在这里加载debug.keystore),在这加载进来,就可以使用了。

         (3)申请成功之后的APPID如下:

 

二、使用微信API接口

1、微信开放平台的一些公共类

(1)微信SDK会用到的主要类的类图

上面这张图展示的是与微信通信过程中的请求类和响应类。第三方应用通过他们

附带的message字段来携带消息传输给微信进程。其中BaseResp有个内部类是ErrCode,它里面定义了几个常量字段,当我们向微信发送请求后它会作为返回字段返回到我们的应用中来,我们可以根据这个做相应的处理(比如弹个toast来提醒用户分享的状态)。

(2)Message相关的类图

上面提到过,第三方应用是通过请求类和响应类中的message字段来和微信通信的,那么下面的图就展示了Message相关类的类图:

第三方应用和微信就是通过上面的不同种类的Message对象来与微信进行通信,从而能达到想要的效果。

(3)通信相关类

 

上面的IWXAPI就是所说的通信类,所有与微信进行通信的工作都是他在做,我们可以通过下面的工厂类来生成一个IWXAPI对象。旁边的IWXAPIEventHandler接口是需要我们第三方应用来实现的,如果我们想处理微信的请求信息或是我们向他发请求后他返回的标识字段,我们可以按照实现这个接口(可以参考微信开放平台文档上有详细说明http://open.weixin.qq.com/document/gettingstart/android/?lang=zh_CN)。

2.1.2微信与第三方应用通信时序图

(4)第三方应用向微信发送消息时的时序图

应用只需要进行一次注册就行了,我们可以在一个Acitivity的onCreate()中注册。然后在以后的使用中只需要封装消息,让通信类发送即可。从前面的类图中可以看到,封装消息的顺序是首先生成需要发送的媒体对象,然后将媒体对象附加到消息对象中,接着建立请求对象,最后使用通信类发送即可。

在向微信发送消息的时候,会弹出一个分享到微信的弹框,包括分享到微信之后的消息展示,都是微信自己定义的UI展示,第三方应用是无法控制的(只是对不同消息类型,微信的展示也是不同的)。

下面就对代码做简单的引导性介绍,微信平台做的还是比较不错的。举一反三,就能做出来微信的对应功能了。

其对应的代码大致如下:

注册到微信

封装Message(以WXWebpageObject 为例)和发送到微信

 

(5)第三方应用接收微信请求信息的时序图

微信向第三方发送的请求信息分为两种:一种是第三方应用注册到微信后在聊天界面出现的应用图标(如下图所示)。然后点击这个图标能向第三方应用发送请求,第二种是针对微信的WXAppExtendObject类型的对象的,当用户点击了微信中的消息之后,微信就会去请求第三方应用完成请求。

 

它的时序图如下所示:

下面对第三方应用接收微信发送的消息的代码做一些简单的介绍,按照以下步骤来就可以了。

1.在工程中建立包名.wxapi的包,其中包名只的是AndroidManifest.xml下面配置的packageName;

2.在新建的包下面新建一个WXEntryActivity类继承Activity,同时实现IWXAPIEventHandler接口(前面有提到过这个接口,用来接受微信的请求和返回信息)。

3.在onCreate()中调用 mApi.handleIntent(getIntent(),this);来等待微信的回调

4.实现IWXAPIEventHandler的onReq(微信发送请求到第三方应用时,会回调到该方法)和onResp(第三方应用发送到微信的请求处理后的响应结果,会回调到该方法)方法

5.另外需要注意在AndroidManifest.xml中配置WXEntryActivity时需要加上android:exported=”true”,主要是为了使微信进程能够调用第三方应用的进程。

其代码如下:

//在onCreate()中调用handleIntent().来等待微信进程的调用。


//微信进程请求第三方应用的回调。

//第三方应用发送Message到微信之后,微信返回的状态信息。

3.使用微信API注意事项

3.1微信公共平台问题

微信作为一个公共平台,还有一些自身的问题,下面是对我碰到的问题做一些描述:

1、

第三方应用是根据微信添加的参数isappinstalled来判断接收方手机上是否已安装了APP,但是经验证发现,微信的这个判断并不准确,即有时候用户手机上安装了APP,但是isappinstalled的值却为0;有时候没装APP,isappInstalled的值又为1。已经将这个问题反映给了微信团队。

2、

测试过程中会出现这种情况,会有个别手机会出现调不起微信客户端的情况。造成这种情况的原因是微信对缩略图的大小、title、description等参数的大小做了限制,所以有可能是大小超过了默认的范围。一般情况下缩略图超出比较常见。Title、description都是文本,一般不会超过。

3、分享到朋友圈时,是直接在第三方应用上弹出了分享框(这个有区别于分享给好友),分享完成之后,通过HOME键再回到微信,发现分享框依旧存在,并且还出现在桌面上。个人猜测,由于微信分享是新开了一个线程来处理,分享完成之后进程并没有被杀死,所以通过HOME键返回微信的时候会用到该进程。这个问题已经向微信反映。

4、通过第三方应用打开微信,假如用户没登录微信,会让用户登录微信,但是登录完成之后登录框还存在,并且这个时候其实已经登录成功了。造成这个问题的原因应该和第三个问题原因相似。

5、按照微信的要求,需要在工程中新建一个”应用包名.wxapi”的包,并在其下建立一个WXEntityActivity类。那么分享完成之后可能有两种情况发生:

 (1)假如没做任何处理,那么分享完成之后回到第三方应用界面会是一个黑色的界面,啥也没有。

 (2)假如在WXEntityActivity类中在IWXAPIEventHandler接口的实现方法onResp()中调用finish()方法将WXEntityActivity销毁掉,那么分享完成之后将会闪过一个黑色的界面回到第三方应用。

综上,其实我们可以发现,微信分享完成之后会到WXEntityActivity这个Activity中,第一种情况,因为WXEntityActivity没有布局文件,所以就是一个黑色的界面。第二种情况,由于finish掉了WXEntityActivity 这个Activity,所以是黑了一下。

这种情况将WXEntityActivity作为应用的界面展示就没有问题了,但是正常情况下,我们都是在已有的项目上加微信分享这个逻辑,所以,代码迁移也是影响比较大的。解决方法是可以用Android系统提供的android:theme=”@android:style/Theme.NoDisplay”。

6、可以反编译下微信的源码看看。

 以上的部分图片是从其它人写的博客里copy过来的。欢迎大家交流学习。

分享到:
评论

相关推荐

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

    微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的 最近由于实习需要也在研究这个东西,这里把我的整个研究情况给出来

    Android应用源码仿微信凡信聊天项目源码

    对于个人开发者或者小企业来说,做IM用第三方的也是一种趋势吧,毕竟自己整一套可供运营使用的IM系统几乎是不切实际的(技术门槛和维护成本)。之前用环信做了几个外包项目,其中有些设计和安排我觉得很赞,所以总结...

    微信第三方登录Android实现代码

    记录一下微信第三方实现登录的方法。还是比较简单。 一、必要的准备工作 1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需要被审核; 2.然后到资源中心下载开发微信所需的工具; 下载...

    Android实现使用微信登录第三方APP的方法

    本文实例讲述了Android实现使用微信登录第三方APP的方法。分享给大家供大家参考,具体如下: 使用微信登录APP,免去注册过程,现在已经有很多的类似应用了。集成该功能过程不复杂,但还是有一些地方需要注意的。 ...

    github精选:微信小程序调试之第三方应用调试技巧

    微信小程序本质实现还是基于webview嵌套网页来实现,不过微信针对Webview体验性能问题给出了自己的一套解决方案,在这个基础上实现虚拟DOM(类似React),资源离线管理,WeixinAPI集成。所以理论上,微信内置浏览器...

    Android开发:微信授权登录与微信分享完全解析

    于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平台官方的在线文档...

    android实现微信联合登录开发示例

    微信,QQ,微博几乎成了我们每个人的手机必备,而且第三方应用也越来越多,不是每个用户都想为你的应用注册一个独立帐号的,所以联合登录也就显得尤为重要,成了我们不得不掌握的开发要点,但你要用微信等帐号实现...

    Android第三方微信支付教程

    一、首先要在微信开发平台注册账号,新增应用,填写正确的包名,正确的签名(MD5中的一串字符冒号去掉,全部小写),当然也会生成的AppID和AppSecret都有用!最后还要花300大洋开通支付功能! 二、分析一下微信支付...

    android第三方分享方式的简单实现

    目前第三方分享方式有两种: 1.需要集成官方sdk包,在获得官方授权后调用其api来完成分享到微信、微博等。  优点:无缝集成,功能多  缺点:集成官方sdk包进行开发,且需要申请官方的授权 2.直接调起微信、微博等...

    java版微信工具,更为优雅的第三方开发常用工具包.zip

    ,让开发微信登录,三方支付就像填表格一样简单。重构成spring boot starter,项目结构和代码也做了优化。主要用了泛型和抽象类进行重构 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化和加速从...

    android判断手机是否安装地图应用实现跳转到该地图应用

    现在很多应用都会用到地图,但是我们肯定不想自己的app中还要弄个导航神马的,所以第三方的地图也为我们开辟了一条捷径,直接将数据传输到地图应用,让第三方的地图帮我们来做好这一切。现在比较流行的地图应用百度...

    Android 第三方登录、分享(ShareSDK、友盟)

    为下边的项目做准备,写一个第三方登录、分享的demo。分别使用sharesdk和友盟来实现。 先说一下我对两者的使用上的感觉,个人感觉sharesdk比友盟更好一点,好在哪里呢?好在人工服务上。在集成的过程中遇到了各种...

    Axure原型设计元件库,基于Axure RP 10/9/8,支持 Android、Apple、Windows、微信,移动、桌面

    这里提供微信和小程序、iOS、macOS、Android、Windows 等多平台的 Axure RP 元件库,你的原型任你自由飞跃。 对于元件库的设计,我参考官方的设计规范文档,尽可能不放过任何一个像素的偏差, 无论长度、宽度、转角...

    Cordova 实现第三方登录及其分享.docx

    只针对移动应用JS 提供SDK ,JS SDK 表面上是最方便cordova 项目实现的,但在授权是通过网页的,其实session还需要在网页上输入用户名和密码来建立,而Android SDK和iOS SDK的实现形式是调用本身已安装的第三方软件完成...

    Cordova 实现第三方登录及其分享.pdf

    只针对移动应用JS 提供SDK ,JS SDK 表面上是最方便cordova 项目实现的,但在授权是通过网页的,其实session还需要在网页上输入用户名和密码来建立,而Android SDK和iOS SDK的实现形式是调用本身已安装的第三方软件完成...

    Android实现第三方授权登录、分享以及获取用户资料

    由于公司项目的需要,要实现在项目中使用第三方授权登录以及分享文字和图片等这样的效果,几经波折,查阅了一番资料,做了一个Demo。实现起来的效果还是不错的,不敢独享,决定写一个总结的教程,供大家互相交流、...

    Android 友盟第三方登录与分享的实现代码

    因为shareSDK分享与第三方登录集成方式类似(共用jar包),所以我就一起说了。 1.下载shareSDK分享的SDK 下载地址: https://developer.umeng.com/sdk 2.导入jar与res 打开开发文档并下载对应的SDK以及demo,下载SDK...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    第三章 跨域交互缓存处理设计 17 3.1 跨域交互缓存处理需求 17 3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18 3.2.2页面回退...

    基于Android的新闻APP开题报告.docx

    课题研究的主要内容 本软件包含新闻资讯的展示、图片的显示、根据所选择的分类实现不同新闻的阅读、新闻的收藏、分享到微信等第三方软件以及夜间模式、无图阅读等。 根据课题所需的模块,论文的提纲如下: 第一部分...

Global site tag (gtag.js) - Google Analytics