前置準備
- 獲取應用簽名:使用友盟提供的工具或命令
keytool -list -v -keystore xxx.keystore 獲取 SHA1 指紋。
- 微信開放平台配置:將簽名、包名填入微信開放平台「移動應用」配置,獲得 AppID、AppSecret。
- 友盟後台綁定:在友盟社交化分享後台添加微信平台,填入 AppID/AppSecret。
Android 客戶端整合
1. 依賴配置
// build.gradle
implementation 'com.umeng.sdk:share:7.x.x'
implementation 'com.umeng.sdk:wechat:7.x.x' // 微信模組
2. AndroidManifest 權限與組件
3. 初始化配置
// Application 或 MainActivity onCreate
PlatformConfig.setWeixin("你的AppID", "你的AppSecret");
UMShareAPI.get(this); // 註冊
4. 發起授權登入
// 登入按鈕點擊
UMShareAPI.get(this).doOauthVerify(this, SHARE_MEDIA.WEIXIN, new UMAuthListener() {
@Override public void onComplete(SHARE_MEDIA platform, int action, Map data) {
// 關鍵:授權成功後,必須再次調用 getPlatformInfo 獲取用戶詳情
UMShareAPI.get(MainActivity.this).getPlatformInfo(MainActivity.this, platform, new UMAuthListener() {
@Override public void onComplete(SHARE_MEDIA p, int a, Map userData) {
// userData 包含:openid, unionid, nickname, headimgurl, gender, city 等
String openid = userData.get("openid");
String nickname = userData.get("name");
String avatar = userData.get("iconurl");
// TODO: 送往後端換取自有 Token、綁定賬號等
}
@Override public void onError(SHARE_MEDIA p, int a, Throwable t) { /* 獲取信息失敗 */ }
@Override public void onCancel(SHARE_MEDIA p, int a) { /* 用戶取消 */ }
});
}
@Override public void onError(SHARE_MEDIA p, int a, Throwable t) { /* 授權失敗 */ }
@Override public void onCancel(SHARE_MEDIA p, int a) { /* 用戶取消授權 */ }
});
5. 回調 Activity 必須轉發
// wxapi/WXEntryActivity.java
public class WXEntryActivity extends WXCallbackActivity {
// 無需額外代碼,父類已處理微信回調轉發給 UMShareAPI
}
常見坑點與解決
| 現象 | 原因 | 解決 |
| 授權成功但獲取用戶信息為空 | 未在 onComplete 中調用 getPlatformInfo | 雙重回調:授權成功 → 立即調用 getPlatformInfo |
| 簽名不匹配 | 打包簽名與微信後台配置不一致 | 確保發布簽名、測試簽名均已配置 |
| 回調不觸發 | WXEntryActivity 包名錯誤、未 exported、或未繼承 WXCallbackActivity | 檢查 Manifest 配置完全符合文檔 |
服務端建議流程
- 客戶端傳送
code 或 openid + unionid 到後端。
- 後端攜帶 AppSecret 向微信換取
access_token、用戶詳情。
- 根據
unionid(跨應用唯一)或 openid 查找/創建本地用戶。
- 簽發自有 JWT/Session,返回客戶端完成登入。
總結
友盟微信登入核心在於「授權 → 獲取信息」雙步驟回調,配合正確的簽名、包名、回調 Activity 配置。服務端務必使用 unionid 做用戶唯一標識,支援多應用互通。
- 上一篇文章: C++ 統計字串中英文字母、數字、空格與其他字元個數實作
- 下一篇文章: Java Web 連接 MySQL 與 SQL Server 完整指南:JSP 與 Java 類實作範例
Copyright ©
程式碼之家 All Rights Reserved