전문가: Kotlin을 사용하는 Android의 Directory App MVVM Jetpack(HMS Identity Kit) - Part-2
이 기사에서는 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이 있는 특정 폴더를 가리키는지 확인하십시오.
앱 빌드 결과
팁과 요령
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
Reference
이 문제에 관하여(전문가: Kotlin을 사용하는 Android의 Directory App MVVM Jetpack(HMS Identity Kit) - Part-2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hmscommunity/expert-directory-app-mvvm-jetpack-hms-identity-kit-in-android-using-kotlin-part-2-7g8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)