ShareSDK 是 MobTech 提供的社交分享組件,支援微信、QQ、微博、Facebook、Twitter 等 40+ 平台一鍵分享、授權登錄、獲取用戶資料。本文基於官方文檔整理 Android 接入全流程,助你快速落地分享功能。
androidv1101)ShareSDK for Android/Libs/MainLibs:核心庫 (jar + res)OnekeyShare:一鍵分享 UI 源碼庫Sample:演示項目Services:插件服務 (如評論讚)
# 1. 複製 jar 到項目 libs/
cp MainLibs/libs/*.jar your-project/libs/
# 2. 複製資源文件 (必須,否則授權頁找不到圖片/字串)
cp -r MainLibs/res/* your-project/src/main/res/
# 3. 若需一鍵分享 UI,再複製 OnekeyShare/src 及 res
# 4. 確保 android-support-v4.jar 存在 (現代項目用 AndroidX 替代)
雙擊運行 SDK 內的 quick_integrate.bat,按提示輸入項目路徑,自動完成複製覆蓋。
在 assets/ShareSDK.xml (需自建 assets 目錄):
<?xml version="1.0" encoding="utf-8"?>
<ShareSDK AppKey="你的Mob_AppKey">
<!-- 新浪微博示例 -->
<SinaWeibo
Id="1"
SortId="1"
AppKey="你的微博_AppKey"
AppSecret="你的微博_AppSecret"
RedirectUrl="你的回調頁域名"
ShareByAppClient="true"
Enable="true" />
<!-- 其他平台同理添加 -->
</ShareSDK>
import cn.sharesdk.framework.ShareSDK;
import java.util.HashMap;
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化 (傳入 Mob AppKey)
ShareSDK.initSDK(this, "你的Mob_AppKey");
// 動態配置平台信息
HashMap<String, Object> weibo = new HashMap<>();
weibo.put("Id", 1);
weibo.put("SortId", 1);
weibo.put("AppKey", "微博_AppKey");
weibo.put("AppSecret", "微博_AppSecret");
weibo.put("RedirectUrl", "回調域名");
weibo.put("ShareByAppClient", true);
weibo.put("Enable", true);
ShareSDK.setPlatformDevInfo("SinaWeibo", weibo);
}
}
登錄 Mob 開發者後台 → 應用管理 → 平台配置,填寫各平台 Key/Secret。
需在代碼調用 ShareSDK.initSDK(context, "Mob_AppKey") 且聯網才生效。
<manifest ...>
<!-- 基礎權限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<application ...>
<!-- ShareSDK 核心 UI 容器 (授權頁等) -->
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<!-- 微信回調 Activity (包名需與應用包名一致,放在 wxapi 目錄) -->
<activity
android:name=".wxapi.WXEntryActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait" />
<!-- 易信回調 (如需) -->
<activity
android:name=".yxapi.YXEntryActivity"
android:exported="true"
... />
</application>
</manifest>
import cn.sharesdk.onekeyshare.OnekeyShare;
public void showShareMenu() {
OnekeyShare oks = new OnekeyShare();
// 關閉 SSO 授權 (某些平台需開啟)
oks.disableSSOWhenAuthorize();
// 標題/標題 URL (印象筆記/郵件用)
oks.setTitle("分享標題");
oks.setTitleUrl("https://example.com");
// 正文內容
oks.setText("這是分享正文內容~");
// 圖片 (本地路徑/網絡 URL/資源 ID)
oks.setImageUrl("https://example.com/logo.png");
// 分享鏈接 (微信/朋友圈/QQ 空間必填)
oks.setUrl("https://example.com/detail.html");
// 回調監聽
oks.setCallback(new PlatformActionListener() {
@Override public void onComplete(Platform p, int action, HashMap<String, Object> data) {
Log.d("ShareSDK", "分享成功: " + p.getName());
}
@Override public void onError(Platform p, int action, Throwable t) {
Log.e("ShareSDK", "分享失敗", t);
}
@Override public void onCancel(Platform p, int action) {
Log.i("ShareSDK", "用戶取消分享");
}
});
// 顯示分享面板
oks.show(this); // this 為 Activity/Context
}
| 現象 | 原因 | 解決 |
|---|---|---|
| 微信分享回調不觸發 | 包名不匹配、未建 wxapi/WXEntryActivity、未在 Manifest 註冊 exported=true | 嚴格對照官網檢查包名路徑 |
| 授權頁空白/崩潰 | 缺少 MainLibs/res 資源、MobUIShell 未註冊 | 補全資源複製、檢查 Manifest |
| 分享面板無圖標 | OnekeyShare/res 未複製、VectorDrawable 兼容性 | 啟用 vectorDrawables.useSupportLibrary = true |
| 簽名驗證失敗 | 發布簽名與微博/微信後台配置不一致 | 確保測試/正式簽名 SHA1 都已填入開放平台 |
ShareSDK 接入核心在於:AppKey 體系區分 (Mob AppKey vs 平台 AppKey)、資源文件完整複製、回調 Activity 包名路徑正確、簽名一致性。建議新項目優先使用 代碼配置方式 (優先級 2),便於構建動態下發平台配置的能力,避免發版週期。分享功能上線前,務必在真機測試所有目標平台的完整鏈路:授權 → 分享 → 回調 → 數據上報。