在Aandroid中分享内容到微信
最近在为我的网站初中物理仿真演示实验汇编开发一个Android客户端,以便教师或学生能够在手机或平板中浏览使用物理仿真模拟。并且实现“网站-微信订阅号-手机APP”三者互通。这需要能够在我的APP中能够向微信中发送分享信息,为此我花了两天时间来开发在Android中分享内容到微信的功能。其中碰到不少坑,现将开发过程分享如下:
微信的三个平台
微信公众平台:和微信公众号、订阅号有关。并提供接口可以和自己的网站进行对接。
微信开放平台:为移动应用和网站应用提供内容分享接口。
腾讯开放平台:开发好的APP可以在这里发布到应用宝内。
如果要开发APP,并通过APP向微信内分享内容,应该使用“微信开放平台”
微信开放平台开发介绍
在你注册应用,并且应用通过审核后。可以“资源中心”找到帮助内容,开发的SDK,以及例子。我把例子的代码粘到这里
分享内容到微信
直接贴代码如下:
public IWXAPI wx;
private WXApi(Context context){
wx = WXAPIFactory.createWXAPI(context, AppID, true);//AppID为注册的APP ID
boolean b = wx.registerApp(AppID);
}
分享的代码
/**
* 分享文字
*
* @param shareContent 分享内容
* @param type 分享类型,朋友圈、收藏、好友,类型定义在SendMessageToWX.Req中,共三种WXSceneFavorite,WXSceneSession,WXSceneTimeline
*/
public void shareText(String shareContent, int type) {
if (!shareContent.isEmpty()) {
WXTextObject textObj = new WXTextObject();
textObj.text = shareContent;
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;
// 发送文本类型的消息时,title字段不起作用
// msg.title = "Title";
msg.description = shareContent;
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
req.message = msg;
req.scene = type;
wx.sendReq(req);
}
}
接收返回信息
如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:
a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)
并在manifest文件里面加上exported属性,设置为true,例如:
b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下图:
当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。
分享内容时碰到的坑——应用签名出错
- 返回信息为 -6:在网上查找,错误代码里没有定义。但从源码中可以看到,-6表示拒绝。在类BaseResp中有定义。最有可能的原因是申请时填的签名不对。
- 把应用签名改正确也不起作用,因为手机微信里有缓存,必须重新安装微信才管用。
- 如果你是用APKTool查到的签名MD5代码,要注意去除:号,并全部小写。
- 最好使用腾讯开放平台提供的获取应用签名的工具看一下签名是否和提交的相同。
- Android Studio debug使用release的签名