AppGallery Connect場景化開發實戰—註冊訂閱通知

華為開發者論壇發表於2021-11-12

藉助AppGallery Connect(以下簡稱AGC)的認證服務,雲函式,簡訊服務等服務,當使用者註冊成功後,便可以在註冊的手機號或者郵箱地址中收到一條應用的歡迎簡訊或者歡迎郵件。以便讓開發者更快地融入到應用中並第一時間知曉應用的熱點內容。

實現流程

接入認證服務手機號碼和郵箱認證方式

首先我們需要通過接入認證服務來打造應用的帳號系統。

啟用認證服務

1、登入AppGallery Connect網站,點選“我的專案”。

2、在專案列表中點選您的專案。選擇“構建 > 認證服務”,

3、進入認證服務頁面,完成如下操作:

a. 開通認證服務

b. 啟用手機號碼和郵箱地址認證方式

開發手機號碼認證方式

由於郵箱地址認證方式與手機號碼認證方式的開發過程高度相似,我們這裡就舉手機號碼認證方式為例。

1、首先我們需要呼叫sendVerifyCode方法獲取驗證碼用於註冊:

public void sendPhoneVerify(String accountNumber) {
    String countryCode = "86";
    VerifyCodeSettings settings = VerifyCodeSettings.newBuilder()
            .action(VerifyCodeSettings.ACTION_REGISTER_LOGIN)
            .sendInterval(30)
            .locale(Locale.SIMPLIFIED_CHINESE)
            .build();
    if (notEmptyString(countryCode) && notEmptyString(accountNumber)) {
        Task<VerifyCodeResult> task = PhoneAuthProvider.requestVerifyCode(countryCode, accountNumber, settings);
        task.addOnSuccessListener(TaskExecutors.uiThread(), verifyCodeResult -> {
            mAuthReCallBack.onSendVerify(verifyCodeResult);
        }).addOnFailureListener(TaskExecutors.uiThread(), e -> {
            Log.e(TAG, "requestVerifyCode fail:" + e.getMessage());
            mAuthReCallBack.onFailed(e.getMessage());
        });
    } else {
        Log.w(TAG, "info empty");
    }
}

2、而後我們呼叫createUser方法進行使用者註冊

public void registerPhoneUser(String accountNumber, String verifyCode, String password) {
    String countryCode = "86";
    PhoneUser phoneUser = new PhoneUser.Builder()
            .setCountryCode(countryCode)
            .setPhoneNumber(accountNumber)
            .setVerifyCode(verifyCode)
            .setPassword(password)
            .build();
    AGConnectAuth.getInstance().createUser(phoneUser)
            .addOnSuccessListener(signInResult -> {
                mAuthReCallBack.onAuthSuccess(signInResult, 11);
            }).addOnFailureListener(e -> {
        mAuthReCallBack.onFailed(e.getMessage());
    });
}

3、對於已註冊過的使用者我們就可以呼叫signin方法進行登入操作

public void phoneLogin(String phoneAccount, String photoPassword) {
    String countryCode = "86";
    AGConnectAuthCredential credential = PhoneAuthProvider.credentialWithVerifyCode(
            countryCode,
            phoneAccount,
            photoPassword,
            null);
    AGConnectAuth.getInstance().signIn(credential).addOnSuccessListener(signInResult -> {
        Log.i(TAG, "phoneLogin success");
        mAuthLoginCallBack.onAuthSuccess(signInResult, 11);
        signInResult.getUser().getToken(true).addOnSuccessListener(tokenResult -> {
            String token = tokenResult.getToken();
            Log.i(TAG, "getToken success:" + token);
            mAuthLoginCallBack.onAuthToken(token);
        });
    }).addOnFailureListener(e -> {
        Log.e(TAG, "Login failed: " + e.getMessage());
        mAuthLoginCallBack.onAuthFailed(e.getMessage());
    });
}

在雲函式中設定認證服務註冊成功觸發器

上述操作完成後,您需在雲函式中配置認證服務觸發器。

1、登入AppGallery Connect網站,點選“我的專案”。

2、在專案列表中點選您的專案。選擇“構建 > 雲函式”,進入雲函式頁面,完成如下操作:

a. 啟用雲函式服務

b. 建立傳送歡迎簡訊的函式(下一章節詳細介紹)

c. 將傳送歡迎簡訊的函式上傳至雲函式

d. 建立認證服務觸發器:事件名稱選擇“使用者註冊”。

雲函式中呼叫簡訊服務介面傳送簡訊

在使用者註冊成功後需要對使用者傳送歡迎簡訊,此處簡訊我們使用AGC提供的簡訊服務傳送。

開通簡訊服務並設定簡訊模板

登入AppGallery Connect網站,點選“我的專案”。

1、在專案列表中點選您的專案。

2、選擇“增長 > 簡訊服務”,進入簡訊服務頁面,完成如下操作:

a. 開通簡訊服務

b. 配置簡訊簽名

c. 配置簡訊模板

d. 啟用API呼叫

雲函式呼叫簡訊服務Rest Api介面傳送簡訊

1、通過觸發器獲取使用者的手機號碼及使用者資訊

var phoneNumber = event.phone.slice(4);
var userID = event.uid;
var userName = "認證使用者ID" + phoneNumber.slice(11);

2、呼叫簡訊服務Rest Api傳送簡訊

var requestData = {
        "account": "AGC199",
        "password":"Huawei1234567890!",
        "requestLists": [
          {
            "mobiles":["" + phoneNumber],
            "templateId":"SMS02_21090100001",
            "messageId":"12345",
            "signature":"【PhotoPlaza】"
          }
        ],
        "requestId": "" + curTime
    };
    logger.info("requestData: " + JSON.stringify(requestData));

    var options = {
      hostname: '121.37.23.38',
      port: 18312,
      path: '/common/sms/sendTemplateMessage',
      method: 'POST',
      headers: {
        'Content-Type' : 'application/json'
      },
      rejectUnauthorized: false,
      requestCert: false
    };

    var req = https.request(options, function(res) {
      res.on('data', function(data) {
        var response = JSON.parse(data.toString());
        logger.info('All resultList: ' + JSON.stringify(response.resultLists));
      });

      res.on('end', function(){
        logger.info('RequestResult: success');
        let result = {"message":"Send Message Success"};
        callback(result);
      });

      res.on('error', function(e) {
        logger.info('request error, ' + e.message);
        let result = {"message":"error:" + e.message}
        callback(result);
       });
    });

    req.on('error', function(error) {
      logger.info('request error, ' + error.message);
      let result = {"message":"error:" + e.message}
      callback(result);
    });

    req.write(JSON.stringify(requestData));
    req.end();

參考文件:

認證服務手機帳號註冊:

https://developer.huawei.com/...

雲函式使用者註冊觸發器:

https://developer.huawei.com/...

簡訊服務開發指南:

https://developer.huawei.com/...

更多精彩內容,請見華為開發者官方論壇→https://developer.huawei.com/...

相關文章