プロダクト ニュース

ウォッチフェイス プッシュで Androidify を Wear OS に導入

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

 

 

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

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

Androidify ウォッチフェイス

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

demonstration.gif

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

Androidify では、スマートフォン アプリ内でウォッチフェイスを動的に生成し、スマートウォッチに送信して、ウォッチフェイスとして自動的に設定できるようになりました。これらすべての処理が数秒で実行されます。

設計の概要

image.png

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

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

まず、ユーザーのアバターが既存のウォッチフェイス フォーマット テンプレートと組み合わされ、APK にパッケージ化されます。これは検証済みです。理由については後ほど説明します。- をスマートウォッチに送信します。

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

詳細を見ていきましょう。

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

ウォッチフェイスは、ウォッチフェイス デザイナーで設計されたテンプレートから作成されます。これは、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 を使用してウェアラブル データレイヤのイベントをリッスンします。

スマートフォン アプリは、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 はウォッチフェイスがアクティブなウォッチフェイスでもあることを確認しようとします。

ウォッチフェイス プッシュでは、アプリがこの機能を実行するために付与する必要がある新しいランタイム権限が導入されています。

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 は、Androidify の強化にも、フル機能のウォッチフェイス マーケットプレイスの構築にも適した汎用性の高い API です。

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

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

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

また、こちらの動画では、Androidify を Wear OS に導入した経緯について詳しくご紹介しています。

Watch Face Push で作成されるウォッチフェイスを楽しみにしています。

作成者:

続きを読む