プロダクト ニュース

Watch Face Push で Androidify を Wear OS に導入

所要時間: 3 分
Garan Jenkin
デベロッパー リレーション エンジニア

 

 

数か月前に、パーソナライズされた Android Bot を生成するアプリとして Androidify を再リリースしました。Androidify は、Gemini と Imagen を使用して、自撮り写真を遊び心のある Android Bot に変換します。

しかし、Android は、最新の XR を含む複数のフォーム ファクタに対応しているため、 Androidify の楽しさを Wear OS にもたらすにはどうすればよいかと考えました。

Androidify のウォッチフェイス

Androidify Bot は高度にパーソナライズされているため、ウォッチフェイスで表示するのが自然です。ウォッチフェイスは最も頻繁に表示されるだけでなく、最もパーソナルなサーフェスであり、自分の個性を表現できます。

demonstration.gif

自撮り画像から生成されたパーソナライズされた Androidify のウォッチフェイス

Androidify は、スマートフォン アプリ内でウォッチフェイスを動的に生成し、スマートウォッチに送信して、ウォッチフェイスとして自動的に設定できるようになりました。すべて数秒で完了します。

設計の概要

image.png

ウォッチフェイスの作成とインストールのエンドツーエンドのフロー

エンドツーエンドのエクスペリエンスを実現するには、この概要設計図に示すように、いくつかのテクノロジーを組み合わせる必要があります。

まず、ユーザーのアバターを既存のWatch Face Formatテンプレートと組み合わせて APK にパッケージ化します。これは検証され(理由については後述します)、スマートウォッチに送信されます。

スマートウォッチで受信すると、Wear OS 6 の一部である新しい Watch Face Push API を使用して、ウォッチフェイスをインストールして有効にします。

詳細を見てみましょう。

ウォッチフェイス テンプレートの作成

ウォッチフェイスはテンプレートから作成されます。テンプレート自体は Watch Face Designerで設計されています。これは、Figma 内でWatch Face Formatのウォッチフェイスを直接作成できる新しい Figma プラグインです。

image.png

Watch Face Designer の Androidify ウォッチフェイス テンプレート

このプラグインを使用すると、ウォッチフェイスをさまざまな方法でエクスポートできます。Watch Face Format(WFF)リソースとしてエクスポートすることも可能です。これらは、Androidify アプリ内のアセットとして簡単に組み込むことができ、最終的なウォッチフェイスを動的に構築できます。

パッケージ化と検証

テンプレートとアバターを組み合わせたらPortable Asset Compiler Kit(Pack)を使用して APK を組み立てます。

Androidify では、Pack はスマートフォン上のネイティブ ライブラリとして使用されます。Androidify が Pack ライブラリと連携する方法について詳しくは、GitHub リポジトリをご覧ください。

送信前の最後のステップとして、APK は Watch Face Push バリデータによってチェックされます。

このバリデータは、APK がインストールに適しているかどうかをチェックします。これには、APK の内容をチェックして有効なウォッチフェイスであることを確認するだけでなく、パフォーマンス チェックも含まれます。有効な場合、バリデータはトークンを生成します。

このトークンは、インストール時にスマートウォッチで必要になります。

ウォッチフェイスの送信

Wear OS の Androidify アプリは、WearableListenerService を使用して、Wearable Data Layer のイベントをリッスンします。

スマートフォン アプリは、ウォッチフェイスを転送します。その際、プロセスを設定するためにMessageClientを組み合わせて使用し、その後ChannelClientを使用して APK をストリーミングします。

スマートウォッチへのウォッチフェイスのインストール

Wear OS デバイスでウォッチフェイスを受信すると、Androidify アプリは新しい Watch Face Push API を使用してウォッチフェイスをインストールします。

  val wfpManager = 

    WatchFacePushManagerFactory.createWatchFacePushManager(context)

val response = wfpManager.listWatchFaces()



try {

    if (response.remainingSlotCount > 0) {

        wfpManager.addWatchFace(apkFd, token)

    } else {

        val slotId = response.installedWatchFaceDetails.first().slotId

        wfpManager.updateWatchFace(slotId, apkFd, token)

    }

} catch (a: WatchFacePushManager.AddWatchFaceException) {

    return WatchFaceInstallError.WATCH_FACE_INSTALL_ERROR

} catch (u: WatchFacePushManager.UpdateWatchFaceException) {

    return WatchFaceInstallError.WATCH_FACE_INSTALL_ERROR

}

Androidify は、シナリオに応じて addWatchFace メソッドまたは updateWatchFace メソッドを使用します。Watch Face Push は、「スロット」という概念を定義します。これは、特定のアプリがいつでもインストールできるウォッチフェイスの数です。Wear OS 6 の場合、この値は実際には 1 です。

Androidify のアプローチでは、空きスロットがある場合はウォッチフェイスをインストールし、ない場合は既存のウォッチフェイスを新しいものに置き換えます。

アクティブなウォッチフェイスの設定

ウォッチフェイスをプログラムでインストールすることは大きな一歩ですが、Androidify はウォッチフェイスがアクティブなウォッチフェイスでもあるようにします。

Watch Face Push では、アプリがこれを実現するために付与する必要がある新しい実行時の権限が導入されています。

com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE

この権限を取得すると、wfpManager.setWatchFaceAsActive() メソッドを呼び出して、インストールされたウォッチフェイスをアクティブなウォッチフェイスに設定できます。

ただし、Androidify が対応する必要がある考慮事項がいくつかあります。

  • setWatchFaceAsActive は 1 回しか使用できません。
  • ユーザーが拒否した後に SET_PUSHED_WATCH_FACE_AS_ACTIVE を再リクエストすることはできません。
  • Androidify がすでにアクティブなウォッチフェイスを制御している可能性があります。

詳しくは、Androidify がアクティブなロジックを設定する方法をご覧ください。

Wear OS 向け Watch Face Push を使ってみる

Watch Face Push は汎用性の高い API であり、Androidify の機能強化にも、フル機能のウォッチフェイス マーケットプレイスの構築にも適しています。

既存のスマートフォン アプリがあり、ユーザーのエンゲージメントを高め、ユーザーを喜ばせる機会を探している場合。

または、マーケットプレイス アプリをリリースして独自のコミュニティとギャラリーを作成しようとしている既存のウォッチフェイス デベロッパーの場合。

次のリソースをご覧ください。

また、Androidify を Wear OS に導入した方法について詳しくは、こちらの動画をご覧ください。

Watch Face Push でどのようなものが作成されるか楽しみにしています。

執筆者:

続きを読む