微信、qq、微博第三方分享集成封装代码

    集成第三方分享功能在app中基本是标配,集成SDK步骤这里就不讲了,注意微信分享测试需要签名apk才可以成功哦。在集成过程中遇到了一些坑,特别是在微信的文档写得真是坑爹的时候。。所以如现在把分享关键代码分享出来,如下:

/**
     * 分享到微信:聊天界面、朋友圈
     *
     * @param api         api注册
     * @param pos         类型:微信好友、朋友圈
     * @param title       标题
     * @param description 描述
     * @param img         图片地址
     * @param url         链接地址
     */
    public void share_to_wx(final IWXAPI api, final int pos, final String title, final String description, final String img, final String url) {     
        if (!api.isWXAppInstalled()) {
            ToastUtil.showToast("微信未安装,请先安装微信APP");
            remove_share();
            return;
        }
        // 线程必须开,不然界面卡死无法调起微信
        Thread thread = new Thread(new Runnable() {

            @Override
            public void run() {
                LogUtils.i(TAG, "weichart pos:" + pos + "title:" + title + "description:" + description);
                Bitmap bitmap = null;
                try {
                    // 压缩图像
                    bitmap = ImageUtil.zoomBitmap(BitmapFactory.decodeStream(new URL(img).openStream()), 80, 80);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (bitmap == null) {
                    bitmap = BitmapFactory.decodeResource(BaseApplication.getAppContext().getResources(), R.mipmap.ic_launcher);
                }
                WXWebpageObject webpage = new WXWebpageObject();
                webpage.webpageUrl = url;
                WXMediaMessage msg = new WXMediaMessage(webpage);
                msg.title = title;
                msg.description = description;
                msg.thumbData = bmpToByteArray(bitmap, true);// 设置缩略图
                if (bitmap != null) {
                    bitmap.recycle();// 释放图像所占用的图片内存资源
                }
                SendMessageToWX.Req req = new SendMessageToWX.Req();
                req.transaction = buildTransaction("webpage");
                req.message = msg;
                req.scene = pos;
                api.sendReq(req);
            }
        });
        thread.start();
    }

    /***
     * 分享到qq空间
     *
     * @param title
     * @param description
     * @param img
     * @param url
     */
    public void share_to_qzone(String title, String description, String img, String url) {
        Bundle params = new Bundle();
        params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);
        params.putString(QzoneShare.SHARE_TO_QQ_TITLE, "" + title);
        params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "" + description);
        params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);
        ArrayList<String> list = new ArrayList<>(); //多图片支持
        list.add(img);
        params.putStringArrayList(QQShare.SHARE_TO_QQ_IMAGE_URL, list);
        params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "蜜藕");

        mTencent.shareToQzone(ShareUtil.this, params, mListener);
    }

    /***
     * 分享到qq
     *
     * @param title
     * @param description
     * @param img
     * @param url
     */
    public void share_to_qq(String title, String description, String img, String url) {
        Bundle params = new Bundle();
        params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
        params.putString(QQShare.SHARE_TO_QQ_TITLE, "" + title);
        params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "" + description);
        params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);
        params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, img);
        params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "蜜藕");

        mTencent.shareToQQ(ShareUtil.this, params, mListener);
    }

    /**
     * 分享到微博
     *
     * @param title
     * @param description
     * @param img
     * @param url
     * @return
     */
    public SendMultiMessageToWeiboRequest share_to_weibo(String title, String description, String img, String url) {
        // 2. 初始化从第三方到微博的消息请求
        SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
        try {
            WeiboMultiMessage weiboMultiMessage = new WeiboMultiMessage();
            //文字
            TextObject textObject = new TextObject();
            textObject.text = title + url;
            //图片
            ImageObject imageObject = new ImageObject();
            //设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。
            Bitmap bitmap = null;
            try {
                // 压缩图像
                bitmap = ImageUtil.zoomBitmap(BitmapFactory.decodeStream(new URL(img).openStream()), 120, 120);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (bitmap == null) {
                bitmap = BitmapFactory.decodeResource(BaseApplication.getAppContext().getResources(), R.mipmap.ic_launcher);
            }
            imageObject.setImageObject(bitmap);
            weiboMultiMessage.textObject = textObject;
            weiboMultiMessage.imageObject = imageObject;
            // 用transaction唯一标识一个请求
            request.transaction = String.valueOf(System.currentTimeMillis());
            request.multiMessage = weiboMultiMessage;
            if (mWeiboShareAPI.isWeiboAppInstalled()) {
                mWeiboShareAPI.sendRequest(ShareUtil.this, request);
            } else {
                AuthInfo authInfo = new AuthInfo(this, Constant.SINAAPPID, Constant.SINA_REDIRECT_URL, "all");
                Oauth2AccessToken accessToken = AccessTokenKeeper.readAccessToken(getApplicationContext());
                String token = "";
                if (accessToken != null) {
                    token = accessToken.getToken();
                }
                mWeiboShareAPI.sendRequest(this, request, authInfo, token, new WeiboAuthListener() {
                            @Override
                            public void onWeiboException(WeiboException arg0) {
                                ToastUtil.showToast("认证失败!");
                                remove_share();
                            }

                            @Override
                            public void onComplete(Bundle bundle) {
                                Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle);
                                AccessTokenKeeper.writeAccessToken(getApplicationContext(), newToken);
                                ToastUtil.showToast("认证成功!");
                                remove_share();
                            }

                            @Override
                            public void onCancel() {
                                ToastUtil.showToast("认证取消!");
                                remove_share();
                            }
                        }
                );
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return request;
    }
      分享这种功能在应用中最好原子化,因为肯定不是一个地方需要这个功能,所以最好是封装在这个基础上封装一下。分享数据来源可以从后台或者本地获取都可以,根据需求,有分享问题请留言,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值