Wear OS uygulamanızı kadran itme için yapılandırma

Watch Face Push, uygulamanızın Wear OS cihazındaki kadranları yönetmesine olanak tanır. Buna kadran ekleme, güncelleme ve kaldırmanın yanı sıra etkin kadranı ayarlama da dahildir. Wear OS uygulamanızı Watch Face Push API'yi kullanacak şekilde yapılandırın.

Kurulum

Gerekli bağımlılıkları ekleyin:

implementation("androidx.wear.watchfacepush:watchfacepush:1.0.0-alpha01")

AndroidManifest.xml alanına aşağıdakileri ekleyin:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Required to use the Watch Face Push API.  -->
    <uses-permission android:name="com.google.wear.permission.PUSH_WATCH_FACES" />

    <!-- Required to be able to call the setWatchFaceAsActive() method. -->
    <uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />

</manifest>

Yönetici örneğine referans alma

WatchFacePushManager örneğini edinme:

val manager = WatchFacePushManagerFactory.createWatchFacePushManager(context)

WatchFacePushManager, Watch Face Push ile etkileşim kurma yöntemlerinin tümüne erişim sağlar.

Slotlarla çalışma

Watch Face Push ile çalışırken önemli bir kavram yuvalardır. Yuvalar, uygulamanıza ait yüklü kadranları ele almanın bir yoludur. Sistem, bir pazar yerinin sahip olabileceği maksimum slot sayısını belirler. Wear OS 6'da bu sınır 1'dir.

Saat yüzü güncellenirken veya kaldırılırken işlem yapılacak saat yüzünü belirlemek için slotId kullanılır.

Kadranları listeleme

Yüklü saat yüzlerinin listesini görmek için listWatchFaces() komutunu kullanın:

val response = watchFacePushManager.listWatchFaces()
val installedList = response.installedWatchFaceDetails
val remainingSlots = response.remainingSlots

Bu sayede, yuvanın kullanılabilir olup olmadığını veya başka bir kadran eklemek için mevcut kadranın değiştirilmesi gerekip gerekmediğini belirleyebilirsiniz. Bu listede, yüklü kadranla ilgili ayrıntılar da yer alır. Örneğin, belirli bir kadran paketinin yüklü olup olmadığını kontrol etmek için:

suspend fun isInstalled(packageName: String) = watchFacePush.listWatchFaces()
    .installedWatchFaceDetails.any { it.packageName == packageName }

Kadran ekleme

listWatchFaces yanıtında belirtildiği gibi uygun alanlar varsa addWatchFace() yöntemi kullanılmalıdır:

try {
    // Supply the validation token along with the watch face package data itself.
    val slot = watchFacePushManager.addWatchFace(parcelFileDescriptor, token)
    Log.i(TAG, "${slot.packageName} (${slot.versionCode}) added in slot ${slot.slotId}")
} catch (e: AddWatchFaceException) {
    // Something went wrong adding the watch face.
}

Kadranı güncelleme

Kadran güncelleme, belirli bir yuvanın içeriğini yeni bir paketle değiştirmenize olanak tanır. Bu işlem, aynı kadranı daha yeni bir sürüme yükseltmek veya kadranı tamamen başka bir kadranla değiştirmek olabilir.

// Replacing the com.example.watchfacepush.green watch face with
// com.example.watchfacepush.red.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
    firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId

try {
    watchFacePushManager.updateWatchFace(slotId, redParcelFileDesc, redValidationToken)
} catch (e: UpdateWatchFaceException) {
    // Something went wrong updating the watch face.
}

Saat yüzünü kaldırma

Bir saat yüzünü kaldırmak için:

// Remove the com.example.watchfacepush.green watch face.
val slotId = watchFacePushManager.listWatchFaces().installedWatchFaceDetails.
    firstOrNull { it.packageName == "com.example.watchfacepush.green" }?.slotId

try {
    watchFacePushManager.removeWatchFace(slotId)
} catch (e: RemoveWatchFaceException) {
    // Something went wrong removing the watch face.
}

Bu sayede saat yüzünüzün her zaman sistem saat yüzü seçicide bulunabilmesini, logonuzun belirgin bir şekilde gösterilmesini ve hatta telefonda Marketplace uygulamanızı başlatacak bir düğme içermesini sağlayabilirsiniz.

Saat yüzünüzün etkin olup olmadığını kontrol etme

Kullanıcının sorunsuz bir deneyim yaşamasını sağlamak için pazar yerinizde etkin saat yüzünün ayarlanıp ayarlanmadığını belirlemek önemlidir. Pazar yerinde etkin saat yüzü zaten ayarlanmışsa kullanıcının başka bir saat yüzü seçmek için mevcut olanı pazar yeri uygulaması üzerinden değiştirmesi yeterlidir. Ancak, pazar yerinde etkin bir saat yüzü ayarlanmamışsa telefon uygulaması, kullanıcıya daha fazla rehberlik sunmalıdır. Bu kullanıcı deneyiminin nasıl ele alınacağı hakkında daha fazla bilgi için telefon uygulamasıyla ilgili bölüme bakın.

Pazar yerinde etkin kadranın ayarlanıp ayarlanmadığını belirlemek için aşağıdaki mantığı kullanın:

val hasActiveWatchFace = watchFacePushManager.listWatchFaces()
    .installedWatchFaceDetails
    .any {
        watchFacePushManager.isWatchFaceActive(it.packageName)
    }

Varsayılan bir kadran sağlama

Kadranı cihaza gönderme özelliği, pazar yeri uygulamanız yüklendiğinde varsayılan bir kadran yükleme olanağı sunar. Bu işlem, varsayılan kadranı etkin olarak ayarlamaz (bkz. etkin kadranı ayarlama) ancak kadranınızın sistem kadran seçicisinde kullanılabilmesini sağlar.

Bu özelliği kullanmak için:

  1. Wear OS uygulama derlemenizde, varsayılan saat yüzünü şu yola ekleyin: assets/default_watchface.apk
  2. AndroidManifest.xml dosyanıza aşağıdaki girişi ekleyin.

    <application ...>
    <meta-data
        android:name="com.google.android.wearable.marketplace.DEFAULT_WATCHFACE_VALIDATION_TOKEN"
        android:value="@string/default_wf_token" />
    

Etkin kadranı ayarlama

Watch Face Push, Marketplace uygulamasının etkin kadranı ayarlamasına olanak tanır.

Bu, özellikle mevcut etkin kadranın Marketplace'e ait olmadığı durumlarda uygulamanın etkin kadranı Marketplace'e ait bir kadran olarak ayarlayabileceği anlamına gelir. Pazar yerinde etkin kadran zaten varsa bu kadranı başka bir kadranla değiştirmek için updateWatchFace çağrısı yapılarak kadran yuvasının içeriği başka bir kadranla değiştirilir.

Etkin kadranı ayarlamak iki aşamalı bir işlemdir:

  1. Etkin kadranı ayarlamak için gereken Android iznini alın.
  2. setWatchFaceAsActive yöntemini çağırın.

Etkin kadranı ayarlamak için izin alma

Gerekli izin SET_PUSHED_WATCH_FACE_AS_ACTIVE'dır ve manifestinize eklenmelidir:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <uses-permission android:name="com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE" />
</manifest>

Bu bir çalışma zamanı izni olduğundan uygulamanız, uygulama çalışırken kullanıcıdan bu izni istemelidir (bu konuda yardımcı olması için Accompanist kitaplığını kullanabilirsiniz).

Kadranı etkin olarak ayarlama

İzin verildikten sonra, etkin olması gereken saat yüzünün yuva kimliğinde setWatchFaceAsActive işlevini çağırın:

watchFacePushManager.setWatchFaceAsActive(slotId)

Bu yöntem kullanıldıktan sonra telefon uygulamanız, etkin kadranın manuel olarak nasıl ayarlanacağı konusunda yol gösterici bilgiler sunmalıdır.

Kadranınızın APK'sından ek meta veriler okuma

WatchFaceSlot nesnesi, kadranınızda belirtebileceğiniz ek bilgileri edinme olanağı da sunar.

Bu özellik, özellikle aynı saat yüzünün küçük varyantlarına sahip olduğunuz senaryolarda yararlı olabilir. Örneğin, aşağıdaki gibi tanımlanmış bir saat yüzünüz olabilir:

  • Paket adı: com.myapp.watchfacepush.mywatchface
  • Paket sürümü: 1.0.0

Ancak bu saat yüzü, dört farklı APK olarak sunulabilir. Bu APK'ların hepsi neredeyse tamamen aynıdır ancak farklı varsayılan renklere (kırmızı, sarı, yeşil ve mavi) sahiptir. Bu renkler, Saat Kadranı Formatı XML'sinde ColorConfiguration olarak ayarlanır.

Bu küçük değişiklik, dört APK'nın her birine yansıtılır:

<!-- For watch face com.myapp.watchfacepush.mywatchface -->
<property
        android:name="default_color"
        android:value="red" />

Özel bir özellik kullanmak, uygulamanızın bu varyantlardan hangisinin yüklendiğini belirlemesine olanak tanır:

watchFaceDetails
    .getMetaDataValues("com.myapp.watchfacepush.mywatchface.default_color")
    .invoke()

Dikkat edilmesi gereken noktalar

Uygulamanızda Watch Face Push'u uygularken dikkat etmeniz gereken önemli noktalar arasında güç tüketimine odaklanma, önbelleğe alma, paketlenmiş kadranları güncelleme ve temsili bir varsayılan kadran sağlama yer alır.

Güç

Wear OS'te çalışan tüm uygulamalar için önemli bir husus güç tüketimidir. Marketplace uygulamanızın Wear OS bileşeni için:

  1. Uygulamanız, kullanıcı tarafından doğrudan etkileşimde bulunulmadığı sürece mümkün olduğunca az ve seyrek çalışmalıdır. Bu türdeki bilgilere şunlar dahildir:
    • Telefon uygulamasından uygulamayı uyandırmayı en aza indirme
    • WorkManager işlerinin çalıştırılmasını en aza indirme
  2. Kol saati şarj olurken herhangi bir Analytics raporu planlayın:
    1. Wear OS uygulamasından veya diğer metriklerden kullanım istatistiklerini bildirmek istiyorsanız requiresCharging kısıtlamasıyla WorkManager'ı kullanın.
  3. Güncellemeleri, kol saati şarj olurken ve kablosuz ağ kullanırken yapılacak şekilde planlama:
    1. Yüklü kadranların sürümlerini kontrol edip otomatik olarak güncelleyebilirsiniz. Yine, requiresCharging kısıtlamasını ve requiresNetworkType için UNMETERED ağ türünü kullanın.
    2. Şarjdayken cihazın kablosuz ağa erişimi olabilir. Güncellenen APK'ları hızlıca indirmek için Wi-Fi isteyin ve işlem tamamlandığında ağı serbest bırakın.
    3. Pazar yerinin günün saat yüzünü sunduğu durumlarda da aynı yönergeler geçerlidir. Bu saat yüzünü, kol saati şarj olurken önceden indirin.
  4. Etkin kadranı kontrol etmek için iş planlamayın:
    1. Pazar yerinizin etkin bir saat yüzü olup olmadığını ve hangi saat yüzünün etkin olduğunu düzenli olarak kontrol etmek pilin boşalmasına neden olur. Bu yaklaşımdan kaçının.
  5. Saatte bildirimleri kullanmayın:
    1. Uygulamanız bildirim kullanıyorsa bunları telefona odaklayın. Kullanıcı işlemi, yolculuğa devam etmek için telefon uygulamasını açar. Bunların setLocalOnly kullanılarak kol saati uygulamasına aktarılmadığından emin olun.

Önbelleğe alınıyor

Standart pazar yeri örneğinde, saat yüzleri telefondan kol saatine aktarılır. Bu bağlantı genellikle Bluetooth bağlantısıdır ve oldukça yavaş olabilir.

Hem daha iyi bir kullanıcı deneyimi sunmak hem de yeniden iletim gücünden tasarruf etmek için Wear OS cihazında birkaç APK'yı depolayacak küçük bir önbellek uygulayabilirsiniz.

Kullanıcı başka bir saat yüzü denedikten sonra daha önce seçtiği saat yüzüne geri dönmeye karar verirse bu işlem neredeyse anında gerçekleşir.

Benzer şekilde, bu özellik günün kadranı için önbelleğe alma veya Wear OS cihaz şarj olurken kadranların indirildiği benzer düzenler için de kullanılabilir.

Paketlenmiş kadranları güncelleme

Uygulamanız, daha önce açıklandığı gibi varsayılan bir kadran öğesi içerebilir. Bu saat kadranı, pazar yeri uygulamanız yüklendiğinde sisteme yüklenir. Ancak pazar yeri uygulamanızın güncellenmesiyle birlikte daha yeni bir sürüm eklenirse saat kadranı güncellenmez.

Bu durumu ele almak için pazar yeri uygulamanız MY_PACKAGE_REPLACED yayın işlemini dinlemeli ve paket öğelerinden paketlenmiş bir kadranı güncelleme ihtiyacını kontrol etmelidir.

Temsili varsayılan kadran

Varsayılan kadran, kullanıcılarınızın pazar yerinizi keşfetmesine ve kullanmasına yardımcı olmanın harika bir yoludur. Kadran, pazar yeriniz yüklendiğinde yüklenir. Böylece kullanıcılar, kadran galerisinde bu kadranı bulabilir.

Varsayılan saat yüzleriyle çalışırken dikkat edilmesi gereken bazı noktalar:

  • Kullanıcı, pazar yeri uygulamanızdan bir kadranı kaldırmayı seçerse removeWatchFace kullanmayın. Bunun yerine, bu durumda updateWatchFace kullanarak kadranı varsayılan kadran olarak geri döndürün. Bu, kullanıcıların kadranınızı bulmasına ve galeriden ayarlamasına yardımcı olur.
  • Varsayılan kadranı logonuz ve temalarınızla basit ve anında tanınabilir hale getirin. Bu sayede kullanıcılar, kadran galerisinde kadranınızı bulabilir.
  • Telefon uygulamasını açmak için varsayılan saat yüzüne bir düğme ekleyin. Bu işlem iki aşamada gerçekleştirilebilir:

    1. Wear OS uygulamasını kullanarak bir amaç başlatmak için kadranınıza Launch öğesi ekleyin. Örneğin:

      <Launch target="com.myapp/com.myapp.LaunchOnPhoneActivity" />

    2. LaunchOnPhoneActivity bölümünde, RemoteActivityHelper simgesini kullanarak telefon uygulamasını başlatın.