美文网首页
第三方服务篇——微信好友分享、朋友圈分享、收藏

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

作者: lvTravler | 来源:发表于2019-08-21 09:47 被阅读0次

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

    笔者基于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 实现分享功能》

    相关文章

      网友评论

          本文标题:第三方服务篇——微信好友分享、朋友圈分享、收藏

          本文链接:https://www.haomeiwen.com/subject/vnwmdctx.html