Kotlinを用いたナビゲーショングローブIOTアプリケーションにおけるHuaweiアカウントキットの統合—第1部



導入
このシリーズでは、ナビゲーショングローブアプリケーションについて学びます.また、ナビゲーショングローブIOTアプリケーションのHuaweiアカウントキットの統合について学びます.
これは本当に面白いアプリケーションです.完全な記事を読むために忍耐を持っている.偉大なことは時間がかかるから.
この製品の働き方を理解しましょう.
手袋
ナビゲーショングローブアプリケーション
何がiotですか?
iotは物事のインターネットを表します.IOTは、デバイスとクラウドの間の通信を容易にする、接続されたデバイスとテクノロジーの集合ネットワークを示します.安価なコンピュータチップとブロードバンド通信の出現のおかげで、今、我々は、インターネットに接続されたデバイスの数十億を持っています.これは、歯ブラシ、真空、自動車、およびマシンのような日常のデバイスは、データを収集し、インテリジェントユーザーに対応するセンサーを使用することができますを意味します.
ナビゲーショングローブアプリケーションの機能.
クイック、シームレス&携帯電話の少ない-ナビゲーション支援.
自動指標(左-右)のサポート.
増加した交通安全-規則に従う、より少ない違反、増加した安全性.
ドッキングポイントの提案とインセンティブ顧客.
クイック、シームレス&携帯電話レス-ナビゲーション支援
ナビゲーション携帯電話用のこのアプリケーションでは必要ありません.手袋は両手で右手を着用してください.アプリケーションのナビゲーション手袋、距離と方向にデバイスにデバイスからデバイスに送信されます接続されます.
自動指標(左と右)のサポート.
我々は左から右のコマンド左の手袋や右手袋が点滅に応じてモバイルアプリケーションから方向を送信しているので.
アプリケーション情報.
このアプリケーションでは、我々はすべてのキットは、アプリケーションとどのようにこの製品の動作に必要なものを学びます.
アカウントキット
マップキット
サイトキット
方向API
ロケーションキット
解析キット
広告キット
リモート設定キット
クラッシュサービスキット
プッシュキット
どのようにこのアプリケーションの作品ですか?
  • Huaweiアカウントでアプリケーションとログインを開く必要があります.
  • ダイアログボックスから必要なすべての許可を与える.
  • 選択したソースと宛先の場所.
  • モード駆動/ウォーキング/サイクリングを選択します
  • ナビゲーションボタンをクリックします.
  • デバイスのリストから示されるデバイスを接続します.
  • ユーザーが移動するユーザーの場所と方向のAPIの距離が計算され、距離が手袋に送信されるように一度接続が行われます.
  • 距離が50メートル未満の場合、点滅は速くなります、さもなければ、それは通常点滅します.
  • ナビゲーショングローブアプリケーションからの
  • 左と右のコマンドは、尊重された左右の手袋に送信されます.
    増加した交通安全性
  • この状況では、ライダーは携帯電話を使用していないので、ライダーは非常に安全であり、ライダーは交通規則に従い、また、違反が少なくなりますので、方向は手袋に表示されます.携帯電話を使用して非常に危険ですが、このナビゲーション手袋のアプリケーションは、方向のためのモバイルの使用を回避するので、ライダーが安全になります.
    ドッキングポイントの提案とインセンティブ
    距離が50メートル未満であるとき、LEDは速く点滅します、それで、終わりユーザーは転換点を理解します.
    アプリケーションをサポートします.
    アプリは2つのモードをサポート-ウォーキングと運転.
    単一のクリック(左/右)で自動的にインジケータシステムを駆動します
    ノーマルとサテライトビュー
    グローブ用ハードウェア部品
    ハードウェアキットが埋め込まれることができる一対の手袋(専門的な入力に基づいて縫われるか、ペーストされる)
    右手手袋のためのキット- ATTINY 85マイクロコントローラ、ブルートゥースモジュール、LED、9 Vのバッテリー、電力制御回路.
    左手手袋のためのキット-ATTINY 85マイクロコントローラ、ブルートゥース・モジュール、LED、9 Vのバッテリー、電力制御回路、NFC読者.

    上記の同じハードウェアは、手袋として、イメージの下でチェックすることができます.


    前提条件
    アカウントアカウント
    アンドロイドスタジオ3 .X
    SDKプラットフォーム19以降
    Gradle 4.6以降
    HMSコア(APK)
    Huawei電話emui
    非Huawei電話アンドロイド4.4以降
    AppGalleryにおけるサービス統合
  • 私たちはAppGalleryの接続でregister as a developerのアカウントが必要です.
  • Creating a Projectを参照してアプリを作成する.
  • 現在の場所に基づいてデータ格納場所を設定します.
  • AppGalleryのアカウントキットサービスを可能にする
  • .
  • 署名の証明書指紋を生成する
  • .
  • 署名している証明書指紋を構成している
  • .
  • AGConnectサービスを取得します.アプリケーションのルートディレクトリにJSONファイル.
  • クライアント開発
  • Android Studio IDEでAndroidプロジェクトを作成します.
  • ビルダースクリプトのリポジトリ内のMaven URLを追加します.
  • maven { url 'https://developer.huawei.com/repo/' }
    
  • プロジェクトレベルの依存関係セクション内にクラスパスを追加します.Gradleファイル.
  • classpath 'com.huawei.agconnect:agcp:1.5.2.300'
    
  • アプリレベルでプラグインを追加します.Gradleファイル.
  • apply plugin: 'com.huawei.agconnect'
    
  • アプリケーションレベルのビルドで以下のライブラリを追加します.gradle file dependenciesセクション.
  • implementation 'com.huawei.hms:hwid:6.1.0.300'
    
  • AndroidManifestで以下のすべてのアクセス許可を追加します.XML
  • <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    
    
  • プロジェクトを同期します.
  •  private fun signIn() {
            val authParams =
                AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken()
                    .createParams()
            val service = AccountAuthManager.getService(this@LoginActivity, authParams)
            startActivityForResult(service.signInIntent, 8888)
        }
    
    LoginActivity.KT
    
    package com.huawei.navigationglove.ui
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import com.huawei.navigationglove.R
    import com.huawei.hms.common.ApiException
    
    import android.widget.Toast
    
    import com.huawei.hms.support.account.result.AuthAccount
    
    import com.huawei.hms.support.account.AccountAuthManager
    
    import android.content.Intent
    import android.util.Log
    import androidx.annotation.Nullable
    
    import com.huawei.hmf.tasks.Task
    
    import com.huawei.hms.support.account.request.AccountAuthParams
    
    import com.huawei.hms.support.account.request.AccountAuthParamsHelper
    import kotlinx.android.synthetic.main.activity_login.*
    
    class LoginActivity : AppCompatActivity() {
        private val TAG: String = LoginActivity::class.java.name
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_login)
            huaweiLogin.setOnClickListener {
                signIn()
            }
        }
    
        private fun signIn() {
            val authParams =
                AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setIdToken()
                    .createParams()
            val service = AccountAuthManager.getService(this@LoginActivity, authParams)
            startActivityForResult(service.signInIntent, 8888)
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, @Nullable data: Intent?) {
            // Process the authorization result and obtain an ID token from AuthAccount.
            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == 8888) {
                val authAccountTask: Task<AuthAccount> =
                    AccountAuthManager.parseAuthResultFromIntent(data)
                if (authAccountTask.isSuccessful()) {
                    // The sign-in is successful, and the user's ID information and ID token are obtained.
                    val authAccount: AuthAccount = authAccountTask.getResult()
                    Log.i(TAG, "idToken:" + authAccount.idToken)
                    Toast.makeText(
                        this,
                        "Welcome " + authAccount.displayName,
                        Toast.LENGTH_LONG
                    ).show()
                    startActivity(Intent(this, HomeScreenActivity::class.java))
                } else {
                    // The sign-in failed. No processing is required. Logs are recorded for fault locating.
                    Log.e(
                        TAG,
                        "sign in failed : " + (authAccountTask.getException() as ApiException).statusCode
                    )
                }
            }
        }
    }
    
    アクティブログイン.XML
    
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/background"
        tools:context=".ui.LoginActivity">
    
    
        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/txtUsername"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="271dp"
            android:layout_height="63dp"
            android:layout_marginStart="70dp"
            android:layout_marginTop="240dp"
            android:layout_marginEnd="70dp"
            android:hint="Username"
            android:textColorHint="#A7A7A7"
            app:boxStrokeColor="#EAEAEE"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/inputUsername"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:textColor="#5B5B5B"
                android:textSize="15sp"
                android:textStyle="bold"
                tools:ignore="TouchTargetSizeCheck" />
        </com.google.android.material.textfield.TextInputLayout>
    
        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/txtPassword"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="271dp"
            android:layout_height="63dp"
            android:layout_marginStart="70dp"
            android:layout_marginTop="310dp"
            android:layout_marginEnd="70dp"
            android:hint="Password"
            android:textColorHint="#A7A7A7"
            app:endIconMode="password_toggle"
            app:boxStrokeColor="#EAEAEE"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/inputPassword"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:textColor="#5B5B5B"
                android:textSize="15sp"
                android:textStyle="bold"
                tools:ignore="TouchTargetSizeCheck" />
        </com.google.android.material.textfield.TextInputLayout>
    
        <Button
            android:id="@+id/button4"
            android:layout_width="271dp"
            android:layout_height="55dp"
            android:layout_marginTop="200dp"
            android:text="Login"
            android:textAllCaps="false"
            android:textAlignment="center"
            android:textColor="#FFFFFF"
            android:textSize="16sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <TextView
            android:id="@+id/textView4"
            android:layout_width="139dp"
            android:layout_height="15dp"
            android:layout_marginStart="70dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="283dp"
            android:text="Don't have account?"
            android:textColor="#A7A7A7"
            android:textSize="13sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button4" />
    
        <TextView
            android:id="@+id/textView6"
            android:layout_width="135dp"
            android:layout_height="16dp"
            android:layout_marginStart="7dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="68dp"
            android:text="Create a new account"
            android:textColor="#3BA8BE"
            android:textSize="12sp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textView4"
            app:layout_constraintTop_toBottomOf="@+id/button4" />
    
        <TextView
            android:id="@+id/textView7"
            android:layout_width="286dp"
            android:layout_height="66dp"
            android:text="Navigation Glove"
            android:textAlignment="center"
            android:textColor="#4E4E4E"
            android:textSize="24sp"
            android:textStyle="normal|bold"
            app:layout_constraintBottom_toTopOf="@+id/txtUsername"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.496"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.407" />
    
        <TextView
            android:id="@+id/textView8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="228dp"
            android:layout_marginTop="6dp"
            android:layout_marginEnd="70dp"
            android:text="Forgot Password?"
            android:textColor="#3BA8BE"
            app:layout_constraintBottom_toTopOf="@+id/button4"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txtPassword" />
    
        <Button
            android:id="@+id/tb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="6dp"
            android:text="Forgot Password?"
            android:textColor="#fff"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView4"
            android:visibility="gone"/>
    
        <com.huawei.hms.support.hwid.ui.HuaweiIdAuthButton
            android:id="@+id/huaweiLogin"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="15dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView4" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    
    Creating an App in the Project
    結果


    ヒントとトリック
  • は、すでにHuawei開発者として登録されていることを確認します.
  • Min SDKのバージョンを21かそれ以降に設定し、そうでなければ、AndOverManifestをマージ問題にします.
  • AGConnectサービスを追加したことを確認します.アプリケーションフォルダにJSONファイル.
  • あなたが確実にSHA - 256指紋を加えたことを確認してください.
  • すべての依存関係が適切に追加されるようにしてください.
  • 6003エラーコードを得るならば、SHA - 256証明書問題があるかもしれません.

  • 結論
    この記事では、Android StudioとKotlinを使用してモバイルアプリケーションでHuaweiアカウントキットの統合への主な流れを学んだ.また、製品の詳細を学び、どのようにこのアプリケーションを動作し、アカウントキットよりも、HMSコアHuaweiプラットフォームとユーザーエクスペリエンスを高めるためにサービスの広い範囲を提供します.我々は、プロジェクトキットを統合するための手順と手順を作成する手順を学んだ.

    リファレンス
    アカウントキット
    アカウントキット
    アカウントキット