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

来源:互联网 发布:软件销售怎么样 编辑:程序博客网 时间:2024/05/21 12:47

    集成第三方分享功能在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;    }
      分享这种功能在应用中最好原子化,因为肯定不是一个地方需要这个功能,所以最好是封装在这个基础上封装一下。分享数据来源可以从后台或者本地获取都可以,根据需求,有分享问题请留言,谢谢

阅读全文
0 0
原创粉丝点击