Android端末におけるHUAWEI IDログイン機能の詳細実装手順４－HMS端末でログイン

# Android SDKによるログイン機能の実装方法

ログイン機能は２つの処理に分けられます。
１．ログイン画面を表示する処理
２．ログイン結果を受け取る処理

### ログイン画面を表示する処理
１．HuaweiIdAuthParamsHelperでログインパラメータを生成します。
２．HuaweiIdAuthManager.getService()でHUAWEI ID認証サービスを取得します。
３．startActivityForResult()でHUAWEI IDのログイン画面（別Activity）を開きます。

```kotlin:HmsHuaweiIdLogic.kt
companion object {
    private const val REQUEST_CODE_SIGN_IN_AUTHORIZATION_CODE = 1000
}

private var authManager: HuaweiIdAuthService? = null

override fun signIn(activity: Activity) {
    val param = HuaweiIdAuthParamsHelper(HuaweiIdAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
        .setAuthorizationCode()
        .createParams()
    authManager = HuaweiIdAuthManager.getService(activity.applicationContext, param)
    authManager?.let {
        activity.startActivityForResult(it.signInIntent,
            REQUEST_CODE_SIGN_IN_AUTHORIZATION_CODE
        )
    }
}
```

### ログイン結果を受け取る処理
１．ログイン結果はonActivityResult()を通して返ってきます。
２．dataを直接に使うことができません。HuaweiIdAuthManager.parseAuthResultFromIntent()で変換する必要があります。
３．変換後、まずisSuccessfulをチェックしなければなりません。
４．実際の変換結果はresultに入ってます。

```kotlin:HmsHuaweiIdLogic.kt
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    when (requestCode) {
        REQUEST_CODE_SIGN_IN_AUTHORIZATION_CODE -> {
            val authHuaweiIdTask = HuaweiIdAuthManager.parseAuthResultFromIntent(data)
            if (authHuaweiIdTask.isSuccessful) {
                with (authHuaweiIdTask.result) {
                    // ユーザーID = this.unionId
                    // プロフィール画像 = this.avatarUriString
                    // ユーザー名 = this.displayName
                }
            } else {
                // エラー処理
                // エラーコード = (authHuaweiIdTask.exception as ApiException).statusCode
            }
        }
    }
}
```

# シリーズ
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順１－ソリューションの概要](https://qiita.com/Rei_2020/items/e02814bd688a41ab8702)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順２－実装準備](https://qiita.com/Rei_2020/items/2eb9dada38cdfc2729ef)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順３－HMS判定](https://qiita.com/Rei_2020/items/285107103be525ce3f98)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順４－HMS端末でログイン](https://qiita.com/Rei_2020/items/548781581caf3e2f4046)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順５－HMS端末でログアウト](https://qiita.com/Rei_2020/items/cc214859b82f518a1cd7)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順６－HMS端末で権限取り消し](https://qiita.com/Rei_2020/items/a04a5894d5e565db969d)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順７－GMS端末でログイン１](https://qiita.com/Rei_2020/items/0a7172d22817a5ae110f)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順８－GMS端末でログイン２](https://qiita.com/Rei_2020/items/c083a16ef016eecdd5ad)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順９－GMS端末でログアウト](https://qiita.com/Rei_2020/items/c0c1f1a68bfd0216cdd3)
- [Android端末におけるHUAWEI IDログイン機能の詳細実装手順１０－GMS端末で権限取り消し](https://qiita.com/Rei_2020/items/2afd389ae123e0552cae)

# GitHub
* https://github.com/Rei2020GitHub/MyPublicProject/tree/master/AccountDemo(H%2BG)

# 参考
* HMS：https://developer.huawei.com/consumer/jp/
* HMS Account Kitの紹介：https://developer.huawei.com/consumer/jp/doc/overview/HMS
* HMS Account Kitのドキュメント：https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides-V5/introduction-0000001050048870-V5
* Huawei Developers：https://forums.developer.huawei.com/forumPortal/en/home
* Facebook Huawei Developersグループ：https://www.facebook.com/Huaweidevs/