背景
需要使用微信登入和配置微信客服。
使用到的包: fluwx
支援以下功能:
- 分享圖片,文字,音樂,影片等。支援分享到會話,朋友圈以及收藏
- 微信支付
- 在微信登入時,獲取Auth Code
- 拉起小程式
- 訂閱訊息
- 開啟微信
- 從微信標籤開啟應用
微信登入
微信登入即下圖的
配置步驟:
1. 微信開發者平臺認證身份
註冊進入後會先註冊主體型別,如果是企業則需要填寫企業名稱、簡介、註冊主體、官網連結、註冊人身份證明等資訊。如果是個人則會簡單一些。
2. 申請建立應用
建立應用需要填寫,app圖示,應用官網,app執行流程圖等資訊。
企業官網需要有 App 的介紹。請確保使用者可以在官網瞭解業務和功能,若官網資訊和申請的實際功能不相符,建立移動應用稽核可能會被拒絕。每次發起建立移動應用的稽核時間約 3 - 7 個工作日,
中間會有一個需要填寫應用簽名的地方
這個簽名用在什麼地方,怎麼獲取呢?
該應用簽名由開發者簽名該應用的keystore檔案決定。
所以我們可以先自己生成一個keystore檔案,
$ keytool -genkey -v -keystore health_service_technician.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias technician
之後在 android/app/build.gradle
檔案配置keystore簽名
//配置keystore簽名
signingConfigs {
release {
keyAlias "client"
keyPassword "123456"
storeFile file("../health_service_client2.keystore")
storePassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
debug {
keyAlias "client"
keyPassword "123456"
storeFile file("../health_service_client2.keystore")
storePassword "123456"
v1SigningEnabled true
v2SigningEnabled true
}
}
現在我們使用flutter 構建的時候,生成的apk檔案就會被簽名了。flutter build apk --split-per-abi.
這個命令會生成如下三個 APK 檔案
/build/app/outputs/apk/release/app-armeabi-v7a-release.apk
/build/app/outputs/apk/release/app-arm64-v8a-release.apk
/build/app/outputs/apk/release/app-x86_64-release.apk
app-arm64-v8a-release:
面向64位ARM處理器架構的應用程式版本。
這適用於支援ARM64架構的裝置,如大多數現代的高階Android手機和平板電腦。
app-armeabi-v7a-release:
面向32位ARM處理器架構的應用程式版本。
這適用於支援ARMv7架構的裝置,包括許多較舊的和低端的Android裝置。
app-x86_64-release:
面向64位x86處理器架構的應用程式版本。
這適用於支援x86_64架構的裝置,如一些Android模擬器或使用Intel或AMD處理器的一些平板電腦和膝上型電腦。
我們選擇其中一個安裝到手機裡,就剩最後一步了。
下載後是這個介面,我們需要把 AndroidManifest.xml
裡面的包名填寫進去。之後會生成一個簽名,把這個簽名填寫到剛才的應用申請處即可
這個簽名是什麼呢?
我們獲取以下我們 keystore 檔案的 MD5值
keytool -list -v -keystore .\health_service_client2.keystore
檢視 MD5 如下
85:BC:DD:36:DB:6D:C4:E5:64:3D:D7:FD:CB:C8:6F:4E
跟我們獲取的 簽名比對
簽名:85bcdd36db6dc4e5643dd7fdcbc86f4e
MD5: 85:BC:DD:36:DB:6D:C4:E5:64:3D:D7:FD:CB:C8:6F:4E
對比發現:MD5值去掉兩兩之間的 " : " ,並將大寫改為小寫之後, 你會發現它和簽名生成工具生成的簽名一模一樣。
總結:微信開放平臺Android應用簽名的本質便是我們簽名檔案keystore的MD5值
當我們打包使用的keystore簽名與微信平臺使用的不一致時,使用app時便會報錯
3. 稽核完成後會獲得appId和appSecret
之後申請以下的 微信登入介面。
如果想要在裝置使用時呼叫登入使用者的微信頭像和名字,則需要申請開發者資質的認證。
需要300塊大洋
4. flutter程式碼開發
4.1 包引入
# 微信sdk外掛
fluwx: ^3.11.0+1
4.2 初始化fluwx
import 'package:fluwx/fluwx.dart';
///微信登入初始化
static void initWXLogin() async {
registerWxApi(
appId: 'wxxxxxx',//檢視微信開放平臺
doOnAndroid: true,
doOnIOS: true,
universalLink:
'xxxxx'//檢視微信開放平臺
);
}
4.3 呼叫fluwx的 sendWeChatAuth
方法, 請求code
///微信登入按鈕
Widget loginWxView() {
if (isBind || isInstalled == null || !isInstalled) {
//如果未安裝微信,則不顯示微信登入按鈕 為了ios上架稽核
return Container();
} else {
return MyWidget.defaultCheckWidget(
Utils.getLocalImgWidget('login/ic_wx_login', 40, 40), () {
if (!_isCheck) {
Fluttertoast.showToast(msg: '請閱讀並同意<使用者服務協議>及<隱私政策>');
return;
}
sendWeChatAuth(scope: "snsapi_userinfo", state: "wechat_sdk_demo_test");
});
}
}
4.4 獲取到code 後,請求後臺登入
///微信登入結果監聽
void loginWxHandler() async {
isInstalled = await isWeChatInstalled;
weChatResponseEventHandler.listen((event) {
if (event is WeChatAuthResponse) {
if (event?.code != null) {
print('wxLogin--code:${event.code}');
_wxLoginRequest(event.code);
} else {
print('wx------------e$event');
// print('wxLogin--code:${event.code}');
}
}
// else {
// print('wx------------e$event');
// }
});
}
上面的程式碼只包括客戶端的,沒有後臺的。具體整體流程程式碼可以檢視官方文件
4.5 流程如下
微信客服
微信客服功能即拉起微信,可以與微信客服對話。
首先你需要去 微信企業客服 註冊, 註冊也是需要300元
註冊完進去裡面找到下面這個頁面, 獲取企業id
選擇一個微信客服,獲取微信客服url
使用: fluwx 的 openWeChatCustomerServiceChat 方法
#App.customerServiceUrl 客服url
#corpId企業id
openWeChatCustomerServiceChat(url:App.customerServiceUrl,corpId: App.corpId);