Android端末におけるHUAWEI IDログイン機能の詳細実装手順１－ソリューションの概要

# [HUAWEI IDログイン機能](https://developer.huawei.com/consumer/jp/doc/overview/HMS)
HUAWEI IDログインはファーウェイが提供しているソーシャルログイン機能です。主にHMS端末で使われているため、GMS端末では利用できないと勘違いしやすいですが、ちゃんと利用できます。

# HMSとGMS両方に対応したHUAWEI IDログイン実装のソリューションの概要
ソリューションの基本概念は単純です。

![HMS Account Kit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/04c05450-d65c-5ffe-a13e-20dd4d2f76a0.png)

１. 端末にHMSが入っていれば、[HMS Account KitのAndroid SDK](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides-V5/android-introduction-0000001098842325-V5)を使います。
２. 端末にHMSが入っていなければ、[HMS Account KitのREST API](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides-V5/web-introduction-0000001050050885-V5)を使います。

![Design Pattern.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/434667e5-5fe2-0b15-7c74-0f728bdf2c66.png)


３. Strategy パターンを利用し、ログイン（signIn）や権限取り消し（cancelAuthorization）など共通している動作を抽出してインターフェースにまとめ、ビジネスロジックはインターフェースを継承したクラスに入れます。

```kotlin:HuaweiIdLogic.kt
interface HuaweiIdLogic {
    fun signIn(activity: Activity)
    fun signOut()
    fun cancelAuthorization(context: Context)
    fun update(context: Context, intent: Intent)
    fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
}
```

```kotlin:HmsHuaweiIdLogic.kt
class HmsHuaweiIdLogic() : HuaweiIdLogic {
    override fun signIn(activity: Activity) {}
    override fun signOut() {}
    override fun cancelAuthorization(context: Context) {}
    override fun update(context: Context, intent: Intent) {}
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {}
}
```

```kotlin:NonHmsHuaweiIdLogic.kt
class NonHmsHuaweiIdLogic() : HuaweiIdLogic {
    override fun signIn(activity: Activity) {}
    override fun signOut() {}
    override fun cancelAuthorization(context: Context) {}
    override fun update(context: Context, intent: Intent) {}
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {}
}
```

# シリーズ
- [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/