전문가: Kotlin을 사용하는 Android의 Directory App MVVM Jetpack(HMS Identity Kit) - Part-2

7591 단어
** 개요**
이 기사에서는 HMS Account, AuthService 및 Identity Kit와 같은 HMS Core 키트를 통합할 Kotlin을 사용하여 Directory Android 애플리케이션을 생성합니다.
앱은 DataBinding, AndroidViewModel, Observer, LiveData 등과 같은 Jetpack 구성 요소를 사용하여 Android MVVM 클린 아키텍처를 사용합니다.
이 기사에서는 Observable 패턴을 사용하여 DataBinding을 구현하려고 합니다.
Hms Core Identity 서비스 소개
Hms Core Identity는 사용자 세부 정보를 추가, 편집 또는 삭제할 수 있는 간편한 인터페이스를 제공하고 사용자가 화면을 한 번 탭하여 주소에 액세스할 수 있도록 앱을 인증할 수 있도록 합니다. 즉, 앱에서 보다 편리한 방법으로 사용자 주소를 얻을 수 있습니다.
전제 조건
1.Huawei 전화 EMUI 3.0 이상.
2. Android 4.4 이상(API 레벨 19 이상)을 사용하는 타사 휴대폰.
3.HMS 코어 APK 4.0.0.300 이상
4.안드로이드 스튜디오
5.AppGallery 계정
앱 갤러리 통합 프로세스
1. AppGallery Connect 포털에서 로그인하고 프로젝트를 생성하거나 선택합니다.

2. 프로젝트 설정으로 이동하여 구성 파일을 다운로드합니다.

3.일반 정보로 이동한 다음 데이터 저장소 위치를 제공합니다.

앱 개발
필수 종속성 추가:
• Android 스튜디오를 시작하고 새 프로젝트를 만듭니다. 일단 프로젝트가 준비되었습니다.
• Gradle 스크립트 폴더로 이동하여 build.gradle(모듈: 앱)을 엽니다.

```플러그인 적용: 'com.android.application'

플러그인 적용: 'kotlin-android'

플러그인 적용: 'kotlin-android-extensions'

플러그인 적용: 'com.huawei.agconnect'

안드로이드 {

compileSdkVersion 30

buildToolsVersion "29.0.3"



buildFeatures {



    dataBinding = true

    viewBinding = true

}



• Add following dependency for HMS Kits



//HMS 키트

구현 'com.huawei.agconnect:agconnect-core:1.5.0.300'
구현 'com.huawei.hms:hwid:5.3.0.302'
구현 'com.huawei.hms:identity:5.3.0.300'



•Navigate to the Gradle scripts folder and open build.gradle (project: app)



• 저장소 {
• Google()
• 제이센터()
• maven {url ' https://developer.huawei.com/repo/' }
• }
• 종속성 {
• 클래스 경로 "com.android.tools.build:gradle:4.0.1"
클래스 경로 'com.huawei.agconnect:agcp:1.4.2.300'



**Code Implementation **
Created following package model, event, viewmodel.
ViewModel: The ViewModel makes it easy to update data changes on the UI.Create a package named viewmodel in your main folder.Then create a new file and name it LoginViewModel.kt along with their FactoryViewModelProviders.
MainActivity.kt:


```package com.hms.directory

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProviders
import com.hms.corrierapp.R
import com.hms.corrierapp.databinding.ActivityMainBinding
import com.hms.directory.event.ActivityNavigation
import com.hms.directory.viewmodel.LoginViewModel
import com.hms.directory.viewmodel.LoginViewModelFactory

class MainActivity : AppCompatActivity(), ActivityNavigation {

    private lateinit var viewModel: LoginViewModel
    private lateinit var dataBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        dataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

        val viewModel: LoginViewModel by lazy {
            val activity = requireNotNull(this) {}
            ViewModelProviders.of(this, LoginViewModelFactory(activity.application))
                .get(LoginViewModel::class.java)
        }

        dataBinding.loginViewModel = viewModel
        dataBinding.lifecycleOwner = this
        viewModel.startActivityForResultEvent.setEventReceiver(this, this)
    }


    public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        viewModel.onResultFromActivity(requestCode, data)
        super.onActivityResult(requestCode, resultCode, data)
    }

}

LoginViewModel.kt:

package com.hms.directory.viewmodel


@SuppressLint("StaticFieldLeak")
class LoginViewModel(application: Application) : AndroidViewModel(application), Observable {

    private val context = getApplication<Application>().applicationContext
    private var mAuthManager: AccountAuthService? = null
    private var mAuthParam: AccountAuthParams? = null

    val startActivityForResultEvent = LiveMessageEvent<ActivityNavigation>()

    fun login() {
        val intent = Intent(context, OrderActivity::class.java)
        intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
        context.startActivity(intent)

       /* mAuthParam = AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM)
            .setIdToken()
            .setAccessToken()
            .createParams()
        mAuthManager = AccountAuthManager.getService(Activity(), mAuthParam)
        startActivityForResultEvent.sendEvent {
            startActivityForResult(
                mAuthManager?.signInIntent,
                HMS_SIGN_IN
            )
        }*/
    }

    fun onResultFromActivity(requestCode: Int, data: Intent?) {
        when (requestCode) {
            HMS_SIGN_IN -> {
                val authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data)
                onCompleteLogin(authAccountTask)
            }
        }
    }

    private fun onCompleteLogin(doneTask: Task<AuthAccount>) {
        if (doneTask.isSuccessful) {
            val authAccount = doneTask.result
            Log.d("LoginViewModel", "SigIn Success")
            context.startActivity(Intent(context, ContactListActivity::class.java))

        } else {
            Log.d("LoginViewModel", "SigIn Error")
        }
    }

    override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
    }

    override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
    }

}


ContactActivity.kt:

public class ContactListActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact_list);

        // Load contacts from file
        Contacts.loadData(this);

        // Set up recycler view and fill it with all the contacts
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.contact_list);
        recyclerView.setAdapter(new ContactListAdapter(this, Contacts.LIST));

    }


XML 레이아웃 DataBinding
UI에 데이터 바인딩을 포함하려면 모든 콘텐츠를 .
ViewModel은 표시된 대로 섹션의 레이아웃에 도입됩니다. 유형 값이 필수 ViewModel이 있는 특정 폴더를 가리키는지 확인하십시오.
앱 빌드 결과

Uploading image
팁과 요령
Identity Kit는 먼저 HUAWEI ID 등록 또는 로그인 페이지를 표시합니다. 사용자는 등록된 HUAWEI ID로 로그인한 후에만 Identity Kit에서 제공하는 기능을 사용할 수 있습니다.
결론
이 기사에서는 Huawei Identity Kit를 Android 애플리케이션에 통합하는 방법을 배웠습니다. 이 기사를 완전히 읽은 후 사용자는 Kotlin을 사용하여 Directory App Android 애플리케이션에서 Huawei ID를 쉽게 구현할 수 있습니다.
이 기사를 읽어 주셔서 감사합니다. 이 글이 도움이 되셨다면 좋아요와 댓글을 꼭 남겨주세요. 그건 나에게 큰 의미 야.
참조
HMS 문서:
https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/introduction-0000001050048870

좋은 웹페이지 즐겨찾기