常用微信集成(第三方sdk集成套路)-- 微信分享

分享

上一章我们讲到了微信登陆的集成,现在我们来看一下微信分享。
微信分享,同样遵循集成的基本流程,那就是:

包装请求(req)--> 发送请求 --> 处理请求 

这个在上一章已经提到过。因为微信分享的特性,我们可以将流程进一步的精简为:

生成请求(req) --> 处理请求 

我们看一下集成方法:

(1). 生成请求

在我们本地搜集好要做分享的数据后,就需要将本地数据封装成微信分享可识别的请求数据,随后通过微信建立分享链接,跳转至微信客户端进行后续步骤:

/** 标准分享 */
    public static void wechatShareNormal(final Activity context, final int flag, final String title,
                                         final String description, final String url, final String thumb) {
        new Thread(new Runnable() {
            @Override
            public void run() {

                Bitmap bmp = ImgFromNetAssistant.getUploadImage(thumb);

                WXWebpageObject webpage = new WXWebpageObject(url);
                WXMediaMessage msg = new WXMediaMessage();
                msg.title = title;
                msg.description = description;
                msg.setThumbImage(bmp);
                msg.mediaObject = webpage;

                // 构造微信请求
                final SendMessageToWX.Req req = new SendMessageToWX.Req();
                req.transaction = String.valueOf(System.currentTimeMillis());
                req.message = msg;
                req.scene = flag;

                // 调用API接口发送到微信
                final IWXAPI wxApi = WXAPIFactory.createWXAPI(context, FirstPageConstants.WX.APP_ID);
                wxApi.registerApp(FirstPageConstants.WX.APP_ID);
                int scale = 10;
                while (!wxApi.sendReq(req) && scale > 0 && bmp != null) {
                    scale -= 1;
                    bmp = Bitmap.createScaledBitmap(bmp, bmp.getWidth() * scale / 10, bmp.getHeight() * scale / 10, true);
                    msg.setThumbImage(bmp);
                }
                if(bmp != null)
                    bmp.recycle();
            }
        }).start();
    }

因为微信分享对图片的大小有严格的限定,所以在进行数据封装的过程中,我们需要对分享用的图片大小进行检测,不合格的进行压缩。这是一个耗时的过程,需要在线程里进行。
当请求发送后,我们就需要等待微信处理结果,待返回我们App时,再进行相应的处理即可。

(2). 分享返回处理

分享结果的接受页面,同样是WXEntryActivity的onResp方法。具体的原理上一章有描述,这里就不在多说了。同样的,微信分享返回结果也是由3个状态码标识的,分别是:

BaseResp.ErrCode.ERR_OK             标识 "分享成功"
BaseResp.ErrCode.ERR_USER_CANCEL    标识 "分享取消"
BaseResp.ErrCode.ERR_USER_CANCEL    标识 "分享失败"

根据三种状态码分别做App相应的业务逻辑处理就好啦,我的demo这里是简单地弹窗提醒了:

 /** 处理微信分享响应 */
    private void handleShareResponse(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                UIUtils.showToastSafe("分享成功");
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                UIUtils.showToastSafe("分享取消");
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                UIUtils.showToastSafe("分享失败");
                break;
        }
        ((Activity) context).finish();
    }

不难看出,分享的流程要比登录简单多了。但是具体的集成流程的3各节点,却是一个都不少的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值