安卓微信分享 回调

本文介绍了如何在Android应用中实现微信分享,包括分享流程、消息构造、回调处理。重点讲解了组装分享数据如图片、推荐语和链接,以及微信SDK中的SendMessageToWX.Req类。回调部分涉及创建WXEntryActivity,实现IWXAPIEventHandler接口,处理onResp方法来判断分享成功与否,并通过广播处理结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要对一些Activity进行微信分享,分享数据包括小图标,图标右侧的推荐语,点击该分享跳转到对于的M页面,分享成功之后返回到当前Activity,同时需要根据用户是否成功进行分享而进行相应操作。

参考了一下微信SDK文档,地址如下:http://open.weixin.qq.com/zh_CN/htmledition/res/dev/document/sdk/wp8/class_micro_msg_1_1sdk_1_1_base_resp.html

这个地址指向的是微信分享后返回的resp数据结构。

新一些的版本可以看这个:http://open.weixin.qq.com/zh_CN/htmledition/res/dev/document/sdk/android/index.html

首先我们先来看下整个分享的过程:


客户端  -----req-------->   微信   -------resp------->  客户端


这里我们先看req


分享信息(简单的图片+推荐语+附带Url链接)这里采用了SendMessageToWX.Req

主要参数为message,scene,transaction。对应作用图中详细描述了。

业务所需要分享的内容主要都封装在massage中,根据自己的需要,可以创建对于的数据类,WXAppExtendMessage、WXBaseMessage、WXImageMessage、WXMediaMessage……

就拿WXMediaMessage举例实现上述三个分享,成员变量中,title存放标题,description用于存放推荐语,mediaObject用于存放Url,thumbData存放图片

WXWebpageObject webPageObj = new WXWebpageObject();
webPageObj.webpageUrl = "http://blog.youkuaiyun.com/qq_22260247/article/";

WXMediaMessage wxMsg = new WXMediaMessage();
wxMsg.mediaObject = webPageObj;
wxMsg.title = "flycgu";
wxMsg.description = "still learning";
wxMsg.thumbData = 二进制图片文件;
……(其他参数可以看上面文档链接)

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = 对应请求的事务ID,通常由Req创建,回复Resp时应填入对应事务ID;
req.message = wxMsg;
req.scene = 发送的目标场景;

IWXAPI api = WXAPIFactory.createWXAPI(context, 向微信注册的ID, true);
api.sendReq(req);

一些常用的方法,包括向微信注册,检测是否安装微信,是否支持分享等

api.registerApp(ID);

iwxapi.isWXAppInstalled();

iwxapi.isWXAppSupportAPI();

成功组装数据发送req请求之后,下面搞定回调部分

1. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,并在manifest文件里面加上exported属性,设置为true。

2. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法。

3. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法。当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。

在这里,我在onResp方法中进行回调成功处理。

@Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {
        case BaseResp.ErrCode.ERR_OK:
            Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show();
            handleWXResp(resp);//处理成功结果
            break;
        case BaseResp.ErrCode.ERR_USER_CANCEL:
            Toast.makeText(WXEntryActivity.this, "分享取消", Toast.LENGTH_SHORT).show();
            break;
        case BaseResp.ErrCode.ERR_AUTH_DENIED:
            Toast.makeText(WXEntryActivity.this, "分享拒绝", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
        }
        finish();
    }
因为所有地方分享回调都走到这里,如何区分是我那个业务呢?随后参考resp中的参数,可以用的是transaction,这个参数是我们在req传入,微信透传返回过来,可以用来区分对于的业务。

为了整体结构,处理成功结果我这里才用了广播的方式。

req.transaction = 对应请求的事务ID,通常由Req创建,回复Resp时应填入对应事务ID;

编译调试,成功走到handleWXResp(resp),resp中的transaction也是我req中传入的值。关于后续的广播方式,可以参考我转的文章,有普通的Broadcast,也有针对app内部的
LocalBroadcastManager,后者不需要权限参数,只需要action。

第一次搞微信分享,还不知道这样的做法是否规范。望指正!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值