如何在Flutter中整合華為認證服務
如何在Flutter中整合華為認證服務
最近發現華為AGC認證服務支援Flutter框架了,期待這個平臺的支援已經很久了,所以迫不及待接入了,關聯了自己的郵箱等賬號。
整合步驟
- 安裝flutter環境
a) 下載Flutter sdk包,地址:flutter.dev/docs/get-started/install/windows
將壓縮包解壓到任意資料夾,例如D:Flutter
b) 將flutter命令檔案新增到環境變數中,此處我新增的Path為D:Flutterflutter_windows_1.22.2-stableflutterbin。
c) 在Android Studio中點選“File-Settings-Plugins”,下載Flutter和Dart外掛,重啟Android Studio使外掛生效。
- 開通服務&建立工程
a) 在AGC建立Android應用並開通認證服務
b) 開啟認證服務中的匿名帳號,手機帳號,郵箱帳號
c) 在Android Studio中新建Flutter工程
d) 將agconnect-services.json檔案放入Android/app目錄下
e) 配置Maven倉地址和AGC外掛地址。
a. 開啟Flutter專案android資料夾下的build.gradle檔案。
b. 在allprojects ->repositories裡面配置maven倉地址。
c. 在buildscript->repositories中配置maven倉地址。
d. 在buildscript->dependencies中配置AppGallery Connect外掛地址。
- 新增編譯依賴和AGC外掛地址。
a. 開啟Flutter專案android/app資料夾下的build.gradle檔案。
b. 在檔案中新增如下配置。
- 整合SDK
在Flutter專案的pubspec.yaml檔案中新增依賴:
dependencies:
flutter:
sdk: flutter
# Add the following line:
agconnect_auth: ^1.1.0
然後點選Pub get進行同步
- 接入功能
- 匿名帳號登入
匿名帳號只需要呼叫signInAnonymously介面進行登入
_signIn() async {
AGCAuth.instance.signInAnonymously().then((value) {
setState(() {
_log =
'signInAnonymously = ${value.user.uid} , ${value.user.providerId}';
});
});
}
透過value,我們可以獲取到使用者資訊,例如這裡我們獲取到了user的id。
- 手機號&郵箱認證
手機號郵箱賬號認證首先需要傳送驗證碼,
手機號請求驗證碼,即呼叫requestVerifyCode方法,傳入手機號、國家碼、設定項作為引數:
_requestPhoneVerifyCode(VerifyCodeAction action) {
String countryCode = _countryCodeController.text;
String phoneNumber = _phoneNumberController.text;
VerifyCodeSettings settings = VerifyCodeSettings(action, sendInterval: 30);
PhoneAuthProvider.requestVerifyCode(countryCode, phoneNumber, settings).then((value) => print(value.validityPeriod));
}
郵箱請求驗證碼,即呼叫requestVerifyCode方法,傳入郵箱、設定項作為引數:
_requestEmailVerifyCode(VerifyCodeAction action) {
String email = _emailController.text;
VerifyCodeSettings settings = VerifyCodeSettings(action, sendInterval: 30);
EmailAuthProvider.requestVerifyCode(email, settings)
.then((value) => print(value.validityPeriod));
}
而後是建立使用者的操作:
建立手機賬號使用者,需要呼叫createPhoneUser方法,傳入封裝好的PhoneUser物件
_createPhoneUser() async {
bool result = await _showPhoneDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String countryCode = _countryCodeController.text;
String phoneNumber = _phoneNumberController.text;
String verifyCode = _verifyCodeController.text;
String password = _passwordController.text;
AGCAuth.instance.createPhoneUser(PhoneUser(countryCode, phoneNumber, verifyCode, password: password)) .then((value) {
setState(() {
_log = 'createPhoneUser = ${value.user.uid} , ${value.user.providerId}';
});
}).catchError((error)=>print(error));
}
建立郵箱賬號使用者,需要呼叫createEmailUser方法,傳入封裝好的EmailUser物件。
_createEmailUser() async {
bool result = await _showEmailDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String email = _emailController.text;
String verifyCode = _verifyCodeController.text;
String password = _passwordController.text;
AGCAuth.instance
.createEmailUser(EmailUser(email, verifyCode, password: password))
.then((value) {
setState(() {
_log = 'createEmailUser = ${value.user.uid} , ${value.user.providerId}';
});
}).catchError((error) => print(error));
}
最後是登入功能,有兩種登入模式,一種是密碼登入方式:
- 手機賬號,呼叫signIn方法,傳入使用手機號等生成的認證憑據。
_signInWithPassword() async {
bool result = await _showPhoneDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String countryCode = _countryCodeController.text;
String phoneNumber = _phoneNumberController.text;
String password = _passwordController.text;
AGCAuthCredential credential = PhoneAuthProvider.credentialWithPassword(countryCode, phoneNumber, password);
AGCAuth.instance.signIn(credential).then((value) {
setState(() {
_log = 'signInWithPassword = ${value.user.uid} , ${value.user.providerId}';
});
});
}
- 郵箱賬號:呼叫signIn方法,傳入透過郵箱和密碼生成的認證憑據。
_signInWithPassword() async {
bool result = await _showEmailDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String email = _emailController.text;
String password = _passwordController.text;
AGCAuthCredential credential =
EmailAuthProvider.credentialWithPassword(email, password);
AGCAuth.instance.signIn(credential).then((value) {
setState(() {
_log =
'signInWithPassword = ${value.user.uid} , ${value.user.providerId}';
});
});
}
另一種是驗證碼登入方式:
- 手機賬號:呼叫signIn方法,傳入透過手機、驗證碼和密碼生成的認證憑據。
_signInWithVerifyCode() async {
bool result = await _showPhoneDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String countryCode = _countryCodeController.text;
String phoneNumber = _phoneNumberController.text;
String verifyCode = _verifyCodeController.text;
String password = _passwordController.text;
AGCAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(countryCode, phoneNumber, verifyCode, password: password);
AGCAuth.instance.signIn(credential).then((value) {
setState(() {
_log = 'signInWithVerifyCode = ${value.user.uid} , ${value.user.providerId}';
});
});
}
- 郵箱賬號:呼叫signIn方法,傳入透過郵箱、驗證碼和密碼生成的認證憑據。
_signInWithVerifyCode() async {
bool result = await _showEmailDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String email = _emailController.text;
String verifyCode = _verifyCodeController.text;
String password = _passwordController.text;
AGCAuthCredential credential = EmailAuthProvider.credentialWithVerifyCode(
email, verifyCode,
password: password);
AGCAuth.instance.signIn(credential).then((value) {
setState(() {
_log =
'signInWithVerifyCode = ${value.user.uid} , ${value.user.providerId}';
});
});
}
- 自有賬號
自有賬號建立jwt獲取token等步驟為server端步驟,端側只需要取到token進行登入即可。
_signIn() async {
bool result = await _showSelfBuildDialog(VerifyCodeAction.registerLogin);
if (result == null) {
print("cancel");
return;
}
String token = _selfBuildController.text;
AGCAuthCredential credential = SelfBuildAuthProvider.credentialWithToken(token);
AGCAuth.instance.signIn(credential).then((value) {
setState(() {
_log = 'signIn = ${value.user.uid} , ${value.user.providerId}';
});
});
}
- 打包
與Android相同,只需要在Android Studio中點選執行即可
原作者:Mayism
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3549/viewspace-2826945/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何在Flutter中整合華為遠端配置服務Flutter
- 如何在 Flutter 中整合華為雲函式服務Flutter函式
- iOS平臺 | 快速整合華為AGC認證服務iOSGC
- 如何在 Xamarin 中快速整合 Android 版認證服務 - 郵箱地址篇Android
- 如何在React Native專案中整合華為遠端配置服務React Native
- 如何在Xamarin中快速整合Android版認證服務-手機號碼篇Android
- 基於MVVM架構的遊戲App如何整合華為遊戲服務(一)——登入認證MVVM架構遊戲APP
- 在快應用中整合華為AGC雲端儲存服務GC
- 【Serverless】Unity快速整合認證服務實現郵件登入ServerUnity
- 微服務整合springsecurity實現認證微服務SpringGse
- 整合華為運動健康服務乾貨總覽健康服務
- Cocos|快速整合華為AGC雲端儲存服務GC
- 快速整合華為AGC雲端儲存服務-AndroidGCAndroid
- 重新認識Java微服務架構-認證服務Java微服務架構
- jwt 如何實現一個服務認證了另一個服務也可以認證JWT
- Identity Server 4 從入門到落地(十二)—— 使用Nginx整合認證服務IDEServerNginx
- 如何在Koa整合Bigpipe首屏渲染服務
- Unity平臺 | 快速整合華為AGC雲資料庫服務UnityGC資料庫
- 如何在Vue專案中引入騰訊驗證碼服務Vue
- openstack 啟動認證服務錯誤
- 快速解決整合華為AGC服務提示miss client id問題GCclient
- Django整合OpenLDAP認證DjangoLDA
- 美創科技DBRA災備系統與華為雲鯤鵬雲服務完成相容性認證
- 一文輕鬆整合華為HMS ML Kit 表格識別服務
- Laravel 5.5 使用 Passport 服務做 API 認證LaravelPassportAPI
- 華為雲 OneAccess 應用身份管理服務,認證授權雙保駕,身份管理的選擇關鍵
- 在pub.dev中認證為"Verified Publisher"併發布flutter庫流程devFlutter
- Microchip推出簡化安全認證產品,為全球提供技術服務
- 如何在cmd中停止mysql服務MySql
- 基於Cocos SDKHub接入華為HMS Game服務—接入華為應用升級服務GAM
- 華為釋出好望雲服務
- 聊聊常見的服務(介面)認證授權
- 開放閘道器統一認證服務
- 華為人才生態數字化平臺 & 華為雲微認證釋出
- gRPC中整合asp.net identity實現oAuth認證RPCASP.NETIDEOAuth
- 行算如將兵:智慧計算中的“華為兵法”
- Flutter平臺 | 零程式碼快速整合AGC崩潰服務FlutterGC
- 如何在 Linux 中配置基於金鑰認證的 SSHLinux