androidAPP接入微信分享【最新】

一、接入前操作

博主昨天接入微信分享遇到了一个大坑和一些小问题,今天跟大家分享一下这些问题和处理办法。

接入前需要注册微信开放平台:https://open.weixin.qq.com/

添加依赖等操作看这里:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=7bc53b063369e012229fe72e75deed066003afea&lang=zh_CN

做完上面的操作就可以开始写接入代码了。


二、分享代码接入

1.在application类中注册应用:

private IWXAPI wxApi;
//注册微信
wxApi = WxApiUtils.regToWx(getApplicationContext());
public static IWXAPI regToWx(Context context){
        IWXAPI iwxapi = WXAPIFactory.createWXAPI(context,APP_ID,true);
        iwxapi.registerApp(APP_ID);

        return iwxapi;
    }

注:APP_ID填你自己应用的APP_ID,在微信开放平台添加上你的应用后会有。

建议:调用微信接口的方法写成一个工具类,博主的微信接口调用都写在 WxApiUtils类中。

2.分享图片到微信聊天窗口或朋友圈

public static boolean sharePic(Context context,int shareType,int resourceId){
        Bitmap bmp = BitmapFactory.decodeResource(context.getResources(),resourceId);
        WXImageObject imgObj = new WXImageObject(bmp);
        WXMediaMessage mediaMsg = new WXMediaMessage();
        mediaMsg.mediaObject = imgObj;
        //设置缩略图
        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp,50,50,true);
        bmp.recycle();
        mediaMsg.thumbData = ImageUtils.bmpToByteArray(thumbBmp,true);

        //构造一个req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = "img"+String.valueOf(System.currentTimeMillis());
        req.message = mediaMsg;

        switch (shareType){
            case SHARE_TYPE_SESSION:
                req.scene = SendMessageToWX.Req.WXSceneSession;
                break;
            case SHARE_TYPE_TIME_LINE:
                req.scene = SendMessageToWX.Req.WXSceneTimeline;
                break;
        }
       return ShuShanApplication.getInstance().getWxApi().sendReq(req);
    }

参数介绍:

shareType:分享的类型,0分享到聊天窗口,1分享到朋友圈

resourceId:分享的图片资源id(注:后面会提供一个重载方法,用Bitmap替代resourceId,方便上传网络图片)

重载方法:

public static boolean sharePic(Context context,int shareType,Bitmap bmp){
        WXImageObject imgObj = new WXImageObject(bmp);
        WXMediaMessage mediaMsg = new WXMediaMessage();
        mediaMsg.mediaObject = imgObj;
        //设置缩略图
        Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp,50,50,true);
        bmp.recycle();
        mediaMsg.thumbData = ImageUtils.bmpToByteArray(thumbBmp,true);

        //构造一个req
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = "img"+String.valueOf(System.currentTimeMillis());
        req.message = mediaMsg;

        switch (shareType){
            case SHARE_TYPE_SESSION:
                req.scene = SendMessageToWX.Req.WXSceneSession;
                break;
            case SHARE_TYPE_TIME_LINE:
                req.scene = SendMessageToWX.Req.WXSceneTimeline;
                break;
        }
        return ShuShanApplication.getInstance().getWxApi().sendReq(req);
    }

这里有几个小问题:

1.bmpToByteArray()方法微信的例子里没有提供出来!!他只写了个Util.bmpToByteArray()就没有然后了!!而且Util这个类没有添加到依赖的微信包里,呵呵,仿佛在逗我笑,你是让我猜这个方法写的啥吗??当然,之后百度到了:

/**
     * 将bmp转换为字节数组
     * @param bmp
     * @param needRecycle
     * @return
     */
    public static byte[] bmpToByteArray(final Bitmap bmp, boolean needRecycle) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
        if (needRecycle) {
            bmp.recycle();
        }

        byte[] result = output.toByteArray();
        try {
            output.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

2."img"+String.valueOf(System.currentTimeMillis());

这里微信的例子里写的是:buildTransaction("img");然后也是没有任何介绍,我只想说这个接入文档写的真是太“详细”了,接入起来很“省心”呢!!

3.测试

大坑就是在测试这里了。

坑:点击分享一闪而过,分享到对话框和朋友圈都是这样。

网上查了很多方法,打包APK出来测试啊,什么什么的啊,都没有作用,浪费了几个小时时间。

之后发现原因:卸载安装一次APP,签名会改变。(会与之前在开放平台创建APP时填入的签名不同)

解决方法:

使用开放平台提供的签名工具:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=7bc53b063369e012229fe72e75deed066003afea&lang=zh_CN

翻到最底下有个“签名生成工具”,点击它就可以下载。

安装好之后run你的应用,跑起来之后打开签名生成工具,输入APP的包名就可以生成签名,把这个签名覆盖掉之前在开放平台设置的签名,然后再测试分享功能,成功!


4.结语

微信开放平台的开发文档真的太坑人,不够详细,还好你们翻到了我这篇博客。

解决了给个赞吧!

有问题请留言,博主会尽快回复!


猜你喜欢

转载自blog.csdn.net/yonghuming_jesse/article/details/80116216

相关文章