https://d226lax1qjow5r.cloudfront.net/blog/blogposts/build-a-chat-app-with-lifecycle-aware-components-for-android-dr/29681523_10214313232718463_78717085_o.jpg

ライフサイクルを考慮したAndroid用コンポーネントでチャットアプリを構築する

最終更新日 May 12, 2021

所要時間:1 分

Nexmoアプリ内SDKを使えば、Androidアプリにチャット機能を簡単に組み込むことができます。以下と組み合わせると Androidアーキテクチャコンポーネントと組み合わせることで、より整理され、メンテナンスしやすく、軽量なコードを作成することができます。この記事では 最初のAndroidクイックスタートを作成し、ライフサイクルを意識したコンポーネントを追加することで、もう少し保守しやすくします。

最初のクイックスタートをご覧になった方は、アクティビティ内のライフサイクル・コールバックでメッセージ・イベントのサブスクライブとアンサブスクライブを行っていることがわかると思います。しかし、ライフサイクルを意識したコンポーネントをアプリに追加することで、依存するコンポーネントのコードをライフサイクルメソッドからコンポーネント自体に移動させることができます。

始める前に

始める前に 最初のクイックスタートを完成させておくか をクローンすることもできます。.また、ユーザーJWTを生成し、会話IDを取得する必要があります。クイックスタート 1 の クイックスタート 1のセットアップ手順に従ってください。

ライフサイクル・アウェア・コンポーネントの追加

依存関係の設定

Google Mavenリポジトリを追加することから始めよう。プロジェクトの build.gradleファイルを開き google()を追加します:

//build.gradle
allprojects {
    repositories {
        jcenter()
        google()
    }
}

次に、Lifecycles依存関係を追加します。アプリの build.gradleファイルを開き、以下の依存関係が含まれていることを確認しよう:

// app/build.gradle
dependencies {
    implementation "android.arch.lifecycle:extensions:1.1.1"
    annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
}

を実施する。LifecycleObserver

現在、デモアプリは、メッセージイベントの購読と購読解除を ChatActivity.しかし、このパターンを続けると、ライフサイクルの現在の状態に応じてUIやその他のコンポーネントを管理する呼び出しが多くなり、アクティビティが肥大化する可能性がある。そこで、この新しいパターンにアノテーションを追加して、ライフサイクルを監視するクラスを作成することで、私たちの懸念を分離することにします。 ChatActivityこの新しいクラスのメソッドにアノテーションを追加します。

を実装する StitchListenerComponentを実装する LifecycleObserver.私たちの ChatActivityonResumeonPauseライフサイクル・コールバックを使用しているため、次の2つのメソッドを StitchListenerComponent: onPause()onResume().そして、これらのメソッドに関連する @OnLifecycleEventアノテーションを付けます。また、コンストラクタとメンバ変数を作成します。 StitchListenerComponentがメッセージの受信を処理できるようにします。 SubscriptionListに属する Conversation.

class StitchListenerComponent implements LifecycleObserver {
  private Conversation conversation;
  private final EditText msgEditTxt;
  private final TextView chatTxt;
  private SubscriptionList subscriptions = new SubscriptionList();

  StitchListenerComponent(Conversation conversation, EditText msgEditTxt, TextView chatTxt) {
      this.conversation = conversation;
      this.msgEditTxt = msgEditTxt;
      this.chatTxt = chatTxt;
  }

  @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
  void onPause() {

  }

  @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
  void onResume() {

  }
}

そして ChatActivityでライフサイクルを観察することができます。 StitchListenerComponentクラスでライフサイクルを観察できる:

//ChatActivity
...
@Override
protected void onCreate(Bundle savedInstanceState) {
  ...
  getLifecycle().addObserver(new StitchListenerComponent(conversation, msgEditTxt, chatTxt));
}

ロジックの移動

カスタム LifecycleObserverを作成したので、ライフサイクルのステータスの変化に反応するロジックを ChatActivityから StitchListenerComponent.を削除することができます。 onResume, onPause, addListenershowMessageメソッドを ChatActivity.代わりに、そのロジックはすべて StitchListenerComponentに住むことになる:

class StitchListenerComponent implements LifecycleObserver {
  //constructor and member variables
  ...

  @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
  void onPause() {
      subscriptions.unsubscribeAll();
      Log.d(TAG, "onPause: Unsubscribe");
  }

  @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
  void onResume() {
      Log.d(TAG, "onResume: Subscribe to message events");
      conversation.messageEvent().add(new ResultListener<Event>() {
          @Override
          public void onSuccess(Event message) {
              showMessage(message);
          }
      }).addTo(subscriptions);
  }

  private void showMessage(final Event message) {
      if (message.getType().equals(EventType.TEXT)) {
          Text text = (Text) message;
          msgEditTxt.setText(null);
          final String prevText = chatTxt.getText().toString();
          chatTxt.setText(prevText + "\n" + text.getText());
      }
  }
}

でアノテーションされたメソッドが呼び出されていることを自分で確認できるように、メソッドにはいくつかのログ文が含まれている。 @OnLifecycleEventでアノテーションされたメソッドが呼び出されていることを確認できます。logcatを開いてチェックしてみてください!

実際のチャットアプリを見る

この投稿で詳しく説明した変更を行った後、アプリを実行して動作を確認してください。アプリの機能は以前と変わりませんが、より整理され、メンテナンスされた状態になっています。このアプリに携わる将来の開発者は感謝することだろう!最終的な状態のアプリをご覧になりたい場合は、ソースコードを私たちの コミュニティgithubページ.

次はどうする?

Nexmo In-App SDK for Androidの使い方を引き続き学びたい方は、クイックスタートで以下の方法をご覧ください。 他のユーザーを招待してチャットするそして イベントリスナーを使うを使ってチャットの履歴を表示したり、ユーザーがタイピングしているところを表示したりする方法を紹介しています。

Nexmo In-App SDKの使用についてご質問がある場合は、以下のコミュニティにご参加ください。 Nexmoコミュニティに参加してください。 #チャンネルチャンネルをご覧いただくか、下記まで直接メールをお送りください。 ea-support@nexmo.com.

シェア:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Chris Guzmanヴォネージの卒業生

クリスはNexmoのデベロッパー・アドボケイトとして、デベロッパーがグローバル・コミュニケーション・プラットフォームを使えるようにサポートしている。カンファレンスに出席していないときは、世界中を歩き回っている。