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,
- 縮圖(可選,支援jpg、png,最大32KB)
1.2.3 音樂型別分享
欄位包含:
- 音樂URL(必填)
- 音樂標題(建議)
- 音樂描述(可選)
- 音樂縮圖(必填)
注意:分享至微信的音樂,直接點選好友會話或朋友圈下的分享內容會跳轉至第三方 APP,點選會話列表頂部的音樂分享內容將跳轉至微信原生音樂播放器播放。
1.2.4 視訊型別分享
欄位包含:
- 視訊URL(必填)
- 視訊標題(建議)
- 視訊描述(可選,但不會顯示)
- 視訊縮圖(可選)
1.2.5 網頁型別分享
欄位包含:
- 網頁URL(必填)
- 網頁標題(建議)
- 網頁描述(可選,但不會顯示)
- 網頁縮圖(可選,支援jpg、png,最大32KB)
注:若使用者未安裝微信,會閃退,需要在自己開發的APP裡進行判斷。
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頁面。
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