Android 微信、QQ、微博分享问题汇总

1. 微信分享

1.1 分享至好友会话

支持类型:文字、图片、音乐、视频、网页、小程序。

1.1.1 文字类型分享

字段包含:

  • 纯文本(必填)

1.1.2 图片类型分享

字段包含:

  • 图片(必填,支持jpg、png、gif最大10MB
  • 缩略图(建议,支持jpg、png,最大32KB

1.1.3 音乐类型分享

字段包含:

  • 音乐URL(必填)
  • 音乐标题(建议)
  • 音乐描述(可选)
  • 音乐缩略图(可选)

注意:分享至微信的音乐,直接点击好友会话或朋友圈下的分享内容会跳转至第三方 APP,点击会话列表顶部的音乐分享内容将跳转至微信原生音乐播放器播放。

1.1.4 视频类型分享

字段包含:

  • 视频URL(必填)
  • 视频标题(建议)
  • 视频描述(可选)
  • 视频缩略图(可选)

1.1.5 网页类型分享

字段包含:

  • 网页URL(必填)
  • 网页标题(必填)
  • 网页描述(可选)
  • 网页缩略图(可选,支持jpg、png,最大32KB

1.1.6 小程序类型分享

字段包含:

  • 小程序网页URL(必填)
  • 小程序用户名(必填)
  • 小程序地址(可选)
  • 小程序标题(建议)
  • 小程序描述(可选,但不会显示)
  • 小程序缩略图(建议)

支持从APP分享小程序类型消息至微信,用户接收后可打开进入小程序。

要求:

    1. 发起分享的App与小程序属于同一微信开放平台帐号。

    2. 支持分享小程序类型消息至会话,暂不支持分享至朋友圈。

    3. 若客户端版本低于6.5.6,小程序类型分享将自动转成网页类型分享。开发者必须填写网页链接字段,确保低版本客户端能正常打开网页链接。

1.2 分享至朋友圈

支持类型:文字、图片、音乐、视频、网页。

1.2.1 文字类型分享

字段包含:

  • 纯文本(必填)

1.2.2 图片类型分享

字段包含:

  • 图片(必填,支持jpg、png、gif最大10MB
  • 缩略图(可选,支持jpg、png,最大32KB

1.2.3 音乐类型分享

字段包含:

  • 音乐URL(必填)
  • 音乐标题(建议)
  • 音乐描述(可选)
  • 音乐缩略图(必填)

注意:分享至微信的音乐,直接点击好友会话或朋友圈下的分享内容会跳转至第三方 APP,点击会话列表顶部的音乐分享内容将跳转至微信原生音乐播放器播放。

1.2.4 视频类型分享

字段包含:

  • 视频URL(必填)
  • 视频标题(建议)
  • 视频描述(可选,但不会显示)
  • 视频缩略图(可选)

1.2.5 网页类型分享

字段包含:

  • 网页URL(必填)
  • 网页标题(建议)
  • 网页描述(可选,但不会显示)
  • 网页缩略图(可选,支持jpg、png,最大32KB

注:若用户未安装微信,会闪退,需要在自己开发的APP里进行判断。

参考:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317340&token=&lang=zh_CN


2. QQ分享(适用TIM)

2.1 分享消息到QQ(无需QQ登录)

分享消息到QQ的接口,可将新闻、图片、文字、应用等分享给QQ好友、群和讨论组。 不用用户授权(使用手机QQ当前的登录态)。调用将打开分享的界面,用户选择好友、群或讨论组之后,点击确定即可完成分享,并进入与该好友进行对话的窗口。

2.1.1 分享图文消息

字段包含:

  • 这条分享消息被好友点击后的跳转URL(必填)
  • 分享的标题 , 最长30个字符(必填)
  • 分享的消息摘要 ,最长40个字(可选)
  • 分享图片的URL或者本地路径(可选,支持jpg、gif)
  • 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替(可选)
  • 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

    (1)分享时自动打开分享到QZone的对话框。

    (2)分享时隐藏分享到QZone按钮

2.1.2 分享纯图片

字段包含:

  • 需要分享的本地图片路径(必填,支持jpg、png、gif)
  • 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替(可选)
  • 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

    (1)分享时自动打开分享到QZone的对话框。

    (2)分享时隐藏分享到QZone按钮

2.1.3 分享音乐

音乐分享后,发送方和接收方在聊天窗口中点击消息气泡即可开始播放音乐。

字段包含:

  • 这条分享消息被好友点击后的跳转URL(必填)
  • 音乐文件的远程链接, 以URL的形式传入, 不支持本地音乐(必填)
  • 分享的标题 , 最长30个字符(必填)
  • 分享的消息摘要,最长40个字符(可选)
  • 分享图片的URL或者本地路径(可选)
  • 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替(可选)
  • 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

    (1)分享时自动打开分享到QZone的对话框。

    (2)分享时隐藏分享到QZone按钮

2.1.4 分享应用

应用分享后,发送方和接收方在聊天窗口中点击消息气泡即可进入应用的详情页。

字段包含:

  • 分享的标题, 最长30个字符(必填)
  • 分享的消息摘要,最长40个字符(可选)
  • 分享图片的URL或者本地路径(可选)
  • 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替(可选)
  • 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):

    (1)分享时自动打开分享到QZone的对话框。

    (2)分享时隐藏分享到QZone按钮

2.2 分享到QQ空间(无需QQ登录,不兼容QQ空间APP)

目前支持图文分享,发表说说、视频,上传图片。不用用户授权(使用手机QQ当前的登录态),调用后将打开手机QQ内QQ空间的界面进行分享或发表操作。

2.2.1 图文分享

字段包含:

  • 分享的标题,最多200个字符(必填)
  • 分享的摘要,最多600个字符(可选)
  • 需要跳转的链接,URL字符串(必填)
  • 分享的图片, 支持多张图片(注:图片最多支持9张图片,多余的图片会被丢弃)(必填,支持jpg、gif)

注意:QZone接口暂不支持发送多张图片的能力,若传入多张图片,则会自动选入第一张图片作为预览图。多图的能力将会在以后支持。

2.2.2 发表说说、视频或上传图片

字段包含:

  • 说说正文(传图和传视频接口会过滤第三方传过来的自带描述,目的为了鼓励用户自行输入有价值信息)(可选)
  • 说说的图片, 支持多张图片(注:<=9张图片为发表说说,>9张为上传图片到相册),只支持本地图片(可选,支持jpg、png、gif)
  • 发表的视频,只支持本地地址,发表视频时必填;上传视频的大小最好控制在100M以内(因为QQ普通用户上传视频必须在100M以内,黄钻用户可上传1G以内视频,大于1G会直接报错)(可选)

注:若用户未安装QQ,会自动跳转到下载QQ页面。

参考:http://wiki.open.qq.com/index.php?title=Android_API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E&=45038


3. 新浪微博分享

3.1 图文分享

发送请求消息到微博,唤起微博分享界面。支持文字、单图、多图、视频字段,具体如下:

  • 文本(必填,分享单张图片时也可不填)
  • 单个图片(分享单图时填入,支持jpg、gif最大2MB
  • 图片列表(分享多图时填入)

          只能设置本地文件的路径,并且是当前应用可以访问的路径,现在不支持网络路径(多图分享依靠微博最新版本的支持,所以当分享到低版本的微博应用时,多图分享失效,h5分享微博暂时不支持多图)

  • 视频地址(分享视频时填入)

3.2 网页分享

分享网页到微博,分享后的效果为微博内容+网页链接。字段包括:

  • 网页URL(必填)
  • 网页标题(建议,但分享后不会显示)
  • 网页描述(可选,但分享后不会显示)
  • 网页缩略图(建议,但分享后不会显示,支持jpg、gif最大32KB

注:若用户未安装新浪微博,可以自动跳转到网页端分享,如果用户未登陆需要登陆。

参考:https://github.com/sinaweibosdk/weibo_android_sdk

 

遇到的坑

微信分享遇到的坑

(1)微信分享必须是签名正式包,并且在微信开放平台已经注册成功,不然分享时会闪退。

(2)微信分享图片或网站时,图片大小不能超过10MB,缩略图大小不能超过32KB,可以在分享前对图片进行压缩。注意这里所述的大小并不是图片占硬盘的大小,而是图片占内存的大小,和硬盘中存储大小没有任何关系。

下面示例了两个压缩的方法,首先是bitmap压缩成byte数组:

    private byte[] bitmapToByteArray(Bitmap bitmap, boolean needRecycle) {
        if (bitmap != null) {
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            int quality;
            byte[] bytes;
            try {
                while (true) {
                    quality = 100;
                    do {
                        outputStream.reset();
                        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
                        bytes = outputStream.toByteArray();
                        if (bytes.length < MAX_THUMB_SIZE) {
                            if (needRecycle) {
                                bitmap.recycle();
                            }
                            return bytes;
                        }
                        quality -= 10;
                    } while (quality > 0);
                    bitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth() / 2, bitmap
                            .getHeight() / 2, true);
                }
            } catch (Exception e) {
                
            } finally {
                try {
                    outputStream.close();
                } catch (Exception e) {
                    
                }
            }
        }
        return null;
    }

然后是bitmap压缩成指定大小的bitmap:

    private void createScaledBitmap() {
        if (mBitmap != null) {
            try {
                if (mBitmap.getByteCount() >= MAX_SIZE) {
                    double scale = Math.sqrt(1.0 * mBitmap.getByteCount() / MAX_SIZE);
                    int scaledWidth = (int) (mBitmap.getWidth() / scale);
                    int scaledHeight = (int) (mBitmap.getHeight() / scale);
                    mBitmap = Bitmap.createScaledBitmap(mBitmap, scaledWidth, scaledHeight, true);
                }
            } catch (Exception e) {
                
            }
        }
    }

(3)一般启动模式为singleTask的Activity再次启动时的生命周期为onNewIntent -> onRestart -> onStart -> onResume,但是当WXEntryActivity的启动模式设为singleTask,在未登录状态下分享到微信,此时取消分享并返回后,生命周期为onRestart -> onStart -> onNewIntent -> onResume。原因可能微信在登录界面返回时做了特殊处理。

QQ分享遇到的坑

(1)QQ分享可以是debug包。

微博分享遇到的坑

(1)微博分享必须是正式签名包,不然分享时会失败。

(2)分享微博中的图片大小限制为2MB,分享网页中的缩略图大小限制为32KB。可以在分享前压缩一下,代码可参照上面微信图片压缩的代码,但是微博API还会对分享的图片以85%的质量压缩成JPEG格式的图片,如果是png图片,会对透明的部分自动填充黑色。

 

参考:

1. http://xyzlf.cn/2016/07/01/android-share-sdk-1.html

2. https://blog.csdn.net/zhaizu/article/details/50680970

3. https://juejin.im/entry/57968072c4c9710054245db7

4. http://wuzheng.site/2016/11/29/Android%E5%BE%AE%E5%8D%9A%E3%80%81%E5%BE%AE%E4%BF%A1%E5%88%86%E4%BA%ABSDK%E5%9B%BE%E7%89%87%E5%A4%A7%E5%B0%8F%E9%99%90%E5%88%B6/

你可能感兴趣的:(Android)