第三方服务篇——微信好友分享、朋友圈分享、收藏

2019-08-21  本文已影响0人  lvTravler

在上一篇微信登录详细实现中,实现了微信登录,那么本篇探索一下微信分享.

笔者基于DIalogFragment实现了分享界面可配合此篇使用传送门

效果图:

ItemDialog.png

微信分享、收藏和登录前期步骤都一样,详情请查看微信登录篇

可分享类型:

1.文字
2.图片
3.音乐
4.视频
5.网页
6.小程序至微信好友会话
7.朋友圈或添加到微信收藏

代码实现

具体实现微信开发平台说的很详细,这里就以网页分享为例

//创建wechatOpenApi实例
override fun init() {
        wechatOpenApi = WXAPIFactory.createWXAPI(this, Config.WECHAT_APPID, true)
 }

private fun shareToWechat(shareIcon: Int,shareScene:Int) {
        if (wechatOpenApi.isWXAppInstalled) {//是否已安装微信客户端
            //初始化一个WXWebpageObject,填写url
            val webPage = WXWebpageObject()
            webPage.webpageUrl = mWebActWebContainer.originalUrl

            //用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象
            val msg = WXMediaMessage(webPage)
            msg.title = mWebActWebContainer.title
            msg.description = mWebActWebContainer.title
            val thumbBmp = BitmapFactory.decodeResource(resources, shareIcon)
           //TODO 转到下边说明
            msg.thumbData = ImageUtil.bmpToByteArray(thumbBmp, Config.MAX_WECHAT_SHARE_THUMB, true)

            //构造一个Req
            val req = SendMessageToWX.Req()
            req.transaction = buildTransaction("webPage")
            req.message = msg
            /**

             //分享场景:微信好友、朋友圈、收藏、特定好友
            req.scene=shareScene
             /**
             * public static final int WXSceneSession = 0;
             * public static final int WXSceneTimeline = 1;
             * public static final int WXSceneFavorite = 2;
             * public static final int WXSceneSpecifiedContact = 3;
             *  对应值
             */
            //调用api接口,发送数据到微信
            wechatOpenApi.sendReq(req)
        } else {
            showError(R.string.not_install_wechat_prompt)
        }
    }

private fun buildTransaction(type: String?): String {
        return if (type == null) System.currentTimeMillis().toString() else type + System.currentTimeMillis()
}
//裁剪图片
public static byte[] bmpToByteArray(final Bitmap bitmap, int maxKb, final boolean needRecycle) {
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
        int options = 100;
        while (output.toByteArray().length > maxKb && options != 10) {
            output.reset(); //清空output
            bitmap.compress(Bitmap.CompressFormat.JPEG, options, output);//这里压缩options%,把压缩后的数据存放到output中
            options -= 10;
        }
        if (needRecycle) {
            bitmap.recycle();
        }
        return output.toByteArray();
    }

注意点:

网页分享图片缩略图(代码msg.thumbData)不能超过32k限制,超出就会分享失败,那么必须对原图进行裁剪,微信Demo中提供了一个裁剪方法,笔者使用后不管用,在网上找了一同学贴出来比较好使的方法(即上述bmpToByteArray())但是地址给忘了,在此说明一下!

在前期工作都做好的情况,分享比较容易。还有一项需要说明的是分享不需要缴300RMB也行,只要资质审核通过就可。

此外,分享也可调用系统分享,更方便但是可定制性不高,就看开发者怎么取舍了,系统分享笔者就不写了,许多同学写的非常清楚

传送门:

《实现分享功能的几个办法》
《Android分享---调用系统自带的分享功能》
《利用 Android 系统原生 API 实现分享功能》

上一篇下一篇

猜你喜欢

热点阅读