同福

Android开发APP实现微信7.0的分享朋友圈功能

介绍

介绍

福哥在APP里面增加分享到微信朋友或者朋友圈的功能的时候发现按照网上的教程做总是会得到错误提示“获取资源失败”,经过一番研究得出了一个结论:微信7.0开始不再支持通过原生的Intent方式分享内容到微信好友或者朋友圈了,需要通过微信开放平台提供的功能才能实现

注册微信开放平台

进入 http://open.weixin.qq.com/ 注册开发者,注册

开发者资质认证

要使用开放平台的功能,需要先进行开发者资质的认证

申请开发者资质

说白了就是“交钱”,享受微信“红利”是要付出一点成本的

f645701fac51bb97.jpg

完成开发者资质认证

开发者资质面向的必须是企业或组织团体,不接受个人申请

60e534645309fd8e.jpg

年审

而且每一年都要审核一次,交一次“保护费”

28e50a454afb6093.jpg

添加移动应用

如果要给APP软件开通微信的朋友圈分享功能的话,就需要添加移动应用,把自己的APP的资料提交给微信开放平台

添加应用

在 管理中心 > 创建移动应用 里添加应用程序(APP)信息
8ad186530a9722ee.jpg0ddedf1b80e14df1.jpg

完成审核

添加完应用需要等待开放平台的工作人员进行人工审核,如果审核不通过,还需要配合重新提交资料

完成审核后可以在应用列表看到申请记录和申请状态

4acf362be55dd70b.jpg

开发

现在我们开始编写分享代码,跟着福哥别掉队哦

引入依赖库包

微信提供了开放平台的API库包,在 dependencies 里增加微信库包

api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

分享网址

这里提供一个分享网址的代码示例

IWXAPI api;
String APP_ID = "wx9885a206d26036e1";

api = WXAPIFactory.createWXAPI(context, APP_ID, true);
api.registerApp(APP_ID);

WXWebpageObject webpageObject = new WXWebpageObject();
webpageObject.webpageUrl = "http://tongfu.net";

WXMediaMessage message = new WXMediaMessage(webpageObject);
message.title = "同福";
message.description = "同福主页";

Bitmap thumb = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher);
message.thumbData = bmpToByteArray(thumb, true);

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = message;
req.scene = SendMessageToWX.Req.WXSceneSession;

api.sendReq(req);

补丁1:bmpToByteArray

官方示例代码用的是 Util.bmpToByteArray,但是你会发现根本没有这个方法,微信开放平台太糊弄了

这里福哥找了一个函数,可以替代这个方法:

private byte[] bmpToByteArray(final Bitmap bmp, final 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:buildTransaction

同样的官方示例代码里的 buildTransaction 这个方法也是不存在的,微信开放平台,福哥已无力吐槽了

这里福哥给出一个替代方案,可以替代这个方法:

private String buildTransaction(final String type) {

    return (type == null) ? String.valueOf(System.currentTimeMillis())
            :type + System.currentTimeMillis();
}

发送朋友和分享朋友圈

如果使用前面的示例代码会弹出发送给朋友的功能,如果要分享到朋友圈功能,需要改一改参数。这里面一个关键参数就是 req.scene,前面的例子传入的参数是 SendMessageToWX.Req.WXSceneSession(发送给朋友),改成 SendMessageToWX.Req.WXSceneTimeline(分享朋友圈)

APP签名

微信开放平台非常搞笑,在我们提交了移动应用并通过审核后,可以看到应用的签名信息

d2385fd96672eda3.jpg但是你将你的安装包安装起来之后,调用微信开放平台的分享功能时候会得到一个错误信息

“签名不对,请检查签名是否与开放平台上填写的一致”

凭什么啊???

要解决这个问题,请继续往下看~~

查询签名

打开微信开放平台的官网教程 https://developers.weixin.qq.com/doc/oplatform/Downloads/Android_Resource.html,找到最下面的一个链接

62ef1e039b281e6d.jpg在手机上安装这个“签名生成工具”APP,这个工具是用来查看其他APP的签名信息的。因为是微信开放平台官网提供的,没有任何权限要求,很安全

安装完之后,将自己的APP的包名填写到最上面的输入框里,然后点击“Get Signature”按钮计算自己的APP的签名信息

db05832e70751e89.jpg

更新签名

点击“Copy to clipboard”按钮,复制签名信息,将它在微信开放平台里我们之前添加的移动应用项目里,把它修改到应用签名里

bc43468a165764e0.jpg然后,退出自己的APP,再退出微信,重新启动自己的APP,重新启动微信,再次测试代码就不会报错了

FAQ

导入opensdk失败

导入“com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+”失败,使用Alt+Enter也没有Import选项,怎么办?

原来是我们使用的是api关键字,换成compile,点击Sync Now,就可以了!

可是不是提示compile is deprecated吗?算了!

无法调出微信分享界面

我们什么都弄好了,尝试调用一下看看吧?发现居然没有任何反应。。。

原来是我们分享的图片太大了,TNND,你给个错误会S啊???

Bitmap thumb = urlToBitmap(shareIconSrc);
Bitmap sThumb = Bitmap.createScaledBitmap(thumb, 120, 120, true);
message.thumbData = bmpToByteArray(sThumb, true);

总结

企鹅教主将微信分享功能迁移到微信开放平台里面,还增加了开发者资质限制,基本就是要收“保护费”嘛。想一想也能理解,人家的平台,你去蹭人家的微信红利,收点钱还是很正常的。

还有一个问题,增加了开发者资质限制,且成为开发者必须至少是一个个体户,这就将个人开发者拒之门外了。微信肯定是跟钱没仇的,这么做大概是出于便于管理的考虑,毕竟管理一个商户比管理一个个人要容易多了。