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

来源:互联网 发布:网络品牌营销现状 编辑:程序博客网 时间:2024/06/06 18:58

分享

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

包装请求(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