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

Kadran Gönderme, uygulamanızın Wear OS cihazdaki 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ı, Kadran Push API'yi kullanacak şekilde yapılandırın.

Kurulum

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

implementation("androidx.wear.watchface:watchface-push:1.3.0-alpha07")

AndroidManifest.xml dosyanıza 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 alın:

val manager = WatchFacePushManager(context)

WatchFacePushManager, kadran itme özelliğiyle etkileşime geçmek için tüm yöntemlere erişim sağlar.

Yuvalarla çalışma

Kadran Push ile çalışırken temel kavramlardan biri slot'lardır. Yuvalar, uygulamanıza ait yüklü kadranlara erişmenin bir yoludur. Sistem, bir pazar yerinin sahip olabileceği maksimum slot sayısını belirler. Wear OS 6'ta bu sınır 1'dir.

Bir kadranı güncellerken veya kaldırırken, işlemin yapılacağı kadranı tanımlamak için slotId kullanılır.

Kadran listelemesi

Yüklü kadran grubunu listelemek için listWatchFaces() simgesini 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ı değiştirmeniz gerekip gerekmediğini belirleyebilirsiniz. Listede, yüklü kadranla ilgili ayrıntılar da gösterilir. Ö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ına göre boş alan 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ükseltme veya kadranı tamamen başka bir kadranla değiştirme 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.
}

Kadran kaldırma

Bir kadranı 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 kadranınız sistem kadran seçicide her zaman bulunabilir, logonuzu belirgin bir şekilde gösterebilir ve hatta telefonda Marketplace uygulamanızı başlatan bir düğme bile içerebilir.

Kadranınızın etkin olup olmadığını kontrol etme

Pazar yerinizin etkin kadranı ayarlayıp ayarlamadığını belirlemek, kullanıcının sorunsuz bir deneyim yaşamasını sağlamak açısından önemlidir: Pazar yerinde etkin kadran ayarlanmışsa kullanıcının başka bir kadran seçmesi gerekir. Bunun için kullanıcının, pazar yeri uygulaması üzerinden mevcut kadranı değiştirmesi yeterlidir. Ancak pazar yerinde etkin kadran ayarlanmamışsa telefon uygulaması kullanıcıya daha fazla rehberlik sunmalıdır. Bu kullanıcı deneyimini nasıl ele alacağınızla ilgili daha fazla bilgi için telefon uygulamasıyla ilgili bölüme bakın.

Pazar yerinde etkin kadran ayarlanıp ayarlanmadığını belirlemek için:

Varsayılan kadran sağlama

Watch Face Push, pazar yeri uygulamanız yüklendiğinde varsayılan bir kadran yükleme olanağı sunar. Bu işlem, varsayılan kadranı etkin olarak ayarlamaz (etkin kadranı ayarlama bölümüne bakın) ancak kadranınızın sistem kadran seçicide gösterilmesini sağlar.

Bu özelliği kullanmak için:

  1. Wear OS uygulama derlemenizdeki yola varsayılan kadranı 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

Kadran itme, pazar yeri uygulamasının etkin kadranı ayarlaması için gerekli olan aracı sağlar.

Bu, uygulamanın etkin kadranı, mevcut etkin kadran pazar yerine ait değilse pazar yerine ait bir kadrana ayarlayabileceği anlamına gelir. Pazar yerinde zaten etkin bir kadran varsa bu kadranı başka bir kadranla değiştirmenin, kadran yuvasının içeriğini başka bir kadranla değiştirmek için updateWatchFace çağrısı aracılığıyla yapıldığını unutmayın.

Etkin kadranı ayarlama işlemi iki aşamada gerçekleşir:

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

Etkin kadranı ayarlama izni alma

Gerekli izin SET_PUSHED_WATCH_FACE_AS_ACTIVE'tür ve manifest dosyanıza 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ında izin olduğundan uygulamanız, çalışırken kullanıcıdan bu izni istemelidir (Bunun için eşlik eden kitaplığını kullanabilirsiniz).

Kadranı etkin olarak ayarlama

İzin verildikten sonra, etkin olması gereken kadran yuvasının kimliğinde setWatchFaceAsActive'ü çağırın:

watchFacePushManager.setWatchFaceAsActive(slotId)

Bu yöntem kullanıldıktan sonra telefon uygulamanız, etkin kadranı manuel olarak ayarlama konusunda yol gösterici bilgiler sunar.

Kadran APK'nızdaki ek meta verileri okuma

WatchFaceSlot nesnesi, kadranınızda beyan edebileceğiniz ek bilgileri almanızı da sağlar.

Bu, özellikle aynı kadran için küçük varyantlara sahip olduğunuz senaryolarda yararlı olabilir. Örneğin, tanımlanmış bir kadranınız olabilir:

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

Ancak bu kadran dört farklı APK olarak gelebilir. Bu APK'ların hepsi neredeyse aynıdır ancak farklı varsayılan renklere sahiptir: kırmızı, sarı, yeşil ve mavi. Bu renkler, kadran biçimi XML'inde bir ColorConfiguration içinde ayarlanır.

Bu küçük farklılık, 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 mülk kullanmak, uygulamanızın aşağıdaki varyantlardan hangisinin yüklendiğini belirlemesine olanak tanır:

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

Dikkat edilmesi gereken noktalar

Uygulamanızda kadran itme özelliğini uygularken dikkat etmeniz gereken önemli noktalar arasında güç tüketimine odaklanmak, önbelleğe alma, paketlenmiş kadranları güncelleme ve temsili bir varsayılan kadran sunma yer alır.

Güç

Wear OS'te çalışan tüm uygulamalar için güç tüketimi önemli bir husustur. Pazar yeri uygulamanızın Wear OS bileşeni için:

  1. Uygulamanız, kullanıcı tarafından doğrudan etkileşim kurulmadığı sürece mümkün olduğunca az ve seyrek çalışmalıdır. Buna aşağıdakiler dahildir:
    • Uygulamanın telefon uygulamasından uyandırılmasını en aza indirme
    • WorkManager işlerinin çalışmasını en aza indirme
  2. Analytics raporlarını saat şarj olurken planlama:
    1. Wear OS uygulamasındaki kullanım istatistiklerini veya başka metrikleri bildirmek istiyorsanız WorkManager'ı requiresCharging kısıtlamasıyla kullanın.
  3. Kol saati şarj olurken ve kablosuz ağ kullanırken güncellemeleri 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. Şarj olurken cihazın kablosuz ağa erişimi olabilir. Güncellenen APK'ları hızlı bir şekilde indirmek için kablosuz ağ isteyin ve indirme işlemi tamamlandığında ağı serbest bırakın.
    3. Pazar yerinin günün kadranını sunabileceği durumlarda da aynı kılavuz geçerlidir. Kadran, kol saati şarj olurken önceden indirilmelidir.
  4. Etkin kadranı kontrol etmek için iş planlamayın:
    1. Pazar yerinizin hâlâ etkin kadran kullanıp kullanmadığını ve hangi kadranı kullandığını düzenli olarak kontrol etmek, pilin daha hızlı tükenmesine neden olur. Bu yaklaşımdan kaçının.
  5. Kol saatinde bildirimleri kullanma:
    1. Uygulamanızda bildirim kullanılıyorsa bu bildirimleri telefona odaklayın. Kullanıcı işlemi, yolculuğa devam etmek için telefon uygulamasını açar. Bu öğelerin setLocalOnly simgesini kullanarak kol saati uygulamasına geçmediğinden emin olun.

Önbelleğe alınıyor

Standart pazar yeri örneğinde, kadranlar 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ünü korumak için Wear OS cihazda birkaç APK'yı depolamak üzere küçük bir önbellek uygulamayı düşünebilirsiniz.

Kullanıcının başka bir kadranı denedikten sonra daha önce seçtiği kadrana geri dönmeye karar vermesi durumunda bu işlem neredeyse anında gerçekleşir.

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

Paket halindeki kadranları güncelleme

Uygulamanız, daha önce açıklandığı gibi varsayılan bir kadran öğesi içerebilir. Bu kadran, pazar yeri uygulamanız yüklendiğinde sisteme yüklenir ancak pazar yeri uygulamanızdaki bir güncellemeyle birlikte yeni bir sürüm paketlenirse 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ş kadranların güncellenmesi gerekip gerekmediğini kontrol etmelidir.

Temsil niteliğinde varsayılan kadran

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

Varsayılan kadranlarla çalışırken dikkat edilmesi gereken bazı noktalar:

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

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

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

    2. LaunchOnPhoneActivity'te RemoteActivityHelper düğmesini kullanarak telefon uygulamasını başlatın.