Kavramlar

Derleme göndermeden görünümü değiştirme

Görünümü ve açılış yüzeyini yönetim panelinden yayınlayın: taslaklar ve yayınlananlar, bir derlemenin bunu nasıl aldığı ve nelerin asla yayınlanmadığı.

Theming içindeki her şey derleme zamanında yapılan bir tercihtir: markanızı Dart içinde eşlersiniz ve bunu değiştirmek bir App Store incelemesi anlamına gelir. Bu doğru bir varsayılandır, çünkü derlemeniz tekrarlanabilir olmalıdır. Ancak bir müşterinin perşembe günü marka rengini değiştirdiği ilk anda yanlış bir kısıtlamaya dönüşür.

Yayınlanan görünüm için her biri çalışan bir asistan olan dört yedek seçenek: çekilen yapılandırma, cihazın önbelleğe alınmış kopyası, kodunuzun init fonksiyonuna ilettiği değerler ve SDK'nın kendi varsayılanları.Yayınlanmış yapılandırma, şimdi çekildiMüşterinin mevcut görünümü200bu mevcut değilseBu cihazın sakladığı son değerfetch çözümlenmeden önce ekrana çizilircachebu mevcut değilseKodunuzun init() işlevine ilettiğiHer zaman taban değerdir, üzerine yazılarak kaldırılamazRendelConfigbu mevcut değilseSDK'nın kendi varsayılanlarıMarkasız, eksiksiz çalışan bir asistanyerleşikHer basamakta trueKodunuzun belirlediği her şey önceliklidir.Burada okunaksız olacak bir temayı cihaz reddeder.Kapalı demek kapalı demektir:koddaki bir kill switch yayınlanarak kaldırılamaz.
Her bir basamak çalışan bir asistandır. Cihazın okuyamadığı bir veri yükü, mevcut olmayan bir ağ ve henüz gerçekleşmemiş bir yayınlama mantıklı bir sonuca ulaşır; bu cihazda okunaksız olacak yayınlanmış bir temayı ise bizzat cihazın kendisi reddeder.

Bu nedenle renk rolleri, köşe yarıçapları, yazı boyutları, kart stilleri, logonuz ve tüm açılış yüzeyi yönetim panelinden de yayınlanabilir; burada bunlar varsayılan hâline gelir ve Dart kodunuz ise taban sınır olur.

Neleri değiştirir

YayınlanabilirNereye yansır
surface, onSurface, accent, onAccentfromTokens fonksiyonunun çalıştırdığı aynı türetim yoluyla katalogdaki her blok. Dördü birden ya da hiçbiri: kısmi bir paletin kontrastı denetlenemez; çünkü dışarıda bıraktığı değerler yönetim panelinden değil Dart kodunuzdan gelir
Yükseltilmiş, alçaltılmış ve yüksek yüzey tonlarısurface değerinin türetilmiş komşuları; yönetim paneli bunları açıkça yayınladığında
Blok köşesi, kontrol köşesiRendelRadiusScale.card ve .control (iletim hattı daha küçük adımları da taşır)
Yazı boyutları (display'den overline'a)RendelTypeScale: her bloğun metin adımları
Yazı tipi ailesi adlarıYalnızca ad olarak, uygulamanızın hâlihazırda içerdiği yazı tipleriyle eşleştirilen metin ve display yazı biçimleri
Stil: kart, buton, ürün düzeni, takip düzeniRendelStyle: her bloğun nasıl inşa edildiği
Blok türüne göre kart bazında görünümlerRendelCardLook
Mesaj kutusu renkleri (composer, onComposer, onComposerFaint), ipucu metni ve üç ikonuMesaj kutusu
Logo (varlık kimliğine göre, /v1/apps/logo üzerinden alınır, asla bir URL değildir)Bir sohbet başladıktan sonra Rendel'in başlığı, adın önünde. Açılış ekranında işaret bulunmaz
Asistan adıBir sohbet başladığında Rendel'in başlığı
Başlatıcı etiketiRendelLauncher üzerindeki kelime
Açılış başlığı ve gövde metni, önerilerAçılış ekranı: selamlama, ardından tek bir kart içinde öneriler
KullanılabilirlikBaşlatıcıyı gizler ve open() çağrısını reddeder

Başka hiçbir şey. Personanız, bilgi kaynaklarınız, aksiyon kayıt defteriniz, anahtarlarınız ve limitleriniz asla bu iletim hattında yer almaz. Bkz. Kasıtlı olarak yayınlanmayanlar.

Taslak ve yayınlanan sürümler farklı kanallardır

Uygulama başına bir yapılandırma vardır ve aynı anda iki sürümü devrededir.

  • Bir test anahtarı taslak sürümü alır. Yönetim panelinde kaydedin; test anahtarınızı çalıştıran kendi uygulamanız bir sonraki açılışında bunu alır.
  • Bir canlı anahtar ise yayınlanan sürümü alır ve bunu yalnızca Yayınla'ya bastıktan sonra alır.

Test anahtarı üzerindeki uygulamanız, önizleme cihazının ta kendisidir. Eşzamanlı tutulacak ikinci bir yüzey yoktur ve “Bu ne zaman kullanıcılarıma ulaşır?” sorusunun yanıtı tek bir kelimedir.

Taslak hakkında bilinmesi gereken bir şey var: test anahtarı yayınlanabilir bir anahtardır ve tıpkı canlı anahtarda olduğu gibi herkes bir TestFlight veya debug derlemesinden bunu ayıklayabilir. Taslak kanalı gizli bir kanal değil, bir kolaylıktır. launcherLabel içine henüz duyurulmamış bir ürün adı koyup gizli kalmasını beklemeyin.

Her yayınlama, yerine geçtiği sürümü saklar ve geri yükleme işlemi, eski bir sürümü doğrudan kullanıcılarınıza sunmak yerine taslağa kopyalar.

SDK tarafı

Bağlanacak bir şey yoktur. init() yapılandırmayı alır, ikinci bir açılışın ilk karede görünümünüzü çizmesi için önce önbelleğe alınmış olanı uygular ve herhangi bir sorun çıktığında doğrudan derlediğiniz koda geri döner.

await Rendel.init(
  appKey: key,
  // Still the floor. Anything the console does not publish comes from here,
  // and anything it publishes is layered over this rather than over the last
  // payload that arrived.
  theme: RendelTheme.fromTokens(
    surface: brand.background,
    onSurface: brand.text,
    accent: brand.primary,
    onAccent: brand.onPrimary,
  ),
  config: const RendelConfig(
    assistantName: 'Kicks',
    launcherLabel: 'Ask',
  ),
);

Açılışlar arasında koruma

Bağlanacak bir şey yoktur. SDK, geçerli son yükü uygulamanın tercihlerinde (shared_preferences) saklar; böylece ilk açılıştan sonra yayınlanan görünümünüz getirme işlemi tamamlanmadan önce ekrana çizilir. RendelConfig.configStore kendi deponuzu (örneğin şifrelenmiş bir depoyu) kullanmanızı sağlar; RendelMemoryConfigStore() ise açılışlar arasında hiçbir şey saklamaz.

Devre dışı bırakma

config: const RendelConfig(remoteConfig: false)

Bu durumda derlemeniz sonsuza kadar tam olarak Dart kodunuzun belirttiği gibi görünür. Tekrarlanabilirlik sizin için perşembe günkü bir marka değişikliğinden daha önemliyse bunu kullanın.

Yeniden başlatmadan yayını alma

Rendel.refreshConfig() bunu yeniden okur. Bunu istiyorsanız uygulamanız ön plana döndüğünde çağırın; SDK yaşam döngüsüne kendisi müdahale etmez, çünkü bir başkasının uygulamasına uygulama yaşam döngüsü gözlemcisi kuran bir SDK sürpriz yaratır.

Her hata modu kod yapılandırmanıza geri döner

Tüm güvenlik güvencesi budur, bu nedenle açık olmakta fayda vardır. Aşağıdakilerin her birinde Rendel tam olarak derlediğiniz hâli işler:

  • Uygulama daha önce hiçbir yapılandırma yayınlamamışsa
  • Cihaz çevrimdışıysa veya istek zaman aşımına uğrarsa
  • API bir hata döndürürse
  • Veri yükü kesilmişse, JSON değilse veya yanlış biçimde bir JSON ise
  • 900 pt gövde boyutu veya negatif yarıçap gibi bir değer aralık dışındaysa
  • Diskteki önbellek bozulmuşsa
  • Veri yükü daha yeni bir sunucudan geliyorsa ve bu derlemenin hiç bilmediği anahtarlar içeriyorsa

Sonuncusu bir tesadüf değil, bir kuraldır: bilinmeyen anahtarlar yoksayılır ve asla kritik bir hataya yol açmaz; böylece yönetim paneli yeni bir kontrol öğrendiğinde sahadaki eski bir ikili dosya çalışmaya devam eder.

Kontrast raporlanır ve taban sınır cihazda uygulanır

Yönetim paneli SDK'nın kendi denetimini çalıştırır: başlatma sırasında auditContrast fonksiyonunun debug konsolunuza yazdırdığı aynı lerp'ler, aynı ikiye bölmeler ve aynı eşikler. Marka turuncunuz üzerine beyaz seçtiğinizde, bunun 3.34:1 olduğunu, hangi kontrolü etkilediğini ve uygulamanın bunun yerine ne çizeceğini size bildirir.

Türetimin kurtardığı değeri değil, yazdığınız değeri ölçer. Kurtarılan değeri ölçmek, bu denetimi yakalamak için var olduğu tek çiftte bile başarısızlığa uğramaz hâle getiriyordu.

Kaydetmenizi engellemez. Eskiden engellerdi ve bu doğru bir fikir için yanlış bir mekanizmaydı: cihaz, okunamıyorsa yazdığınız rengi asla çizmez — rengi koyulaştırır ve sonucu çizer — dolayısıyla reddedilen şey okunaksız bir uygulama değil, ayarlanacak olan renk örneğiydi. Bir markanın hangi renk örneğini kullanacağı markanın kendi kararıdır ve sürükleme ortasında bunu reddeden bir ekran özenli olmaktan ziyade bozuk gibi görünüyordu. Rapor bir rapor olarak kalır; renk örneğinizin telefonla eşleşmesini tercih ediyorsanız tek bir tıklama ayarlanmış değeri alır.

Taban sınırın kendisi değişmedi, çünkü hiçbir zaman yönetim panelinde değildi:

  • Okunaksız bir onAccent, onSurface, onComposer veya onComposerFaint, release derlemelerinde 4.5:1 oranını geçene kadar koyulaştırılır ve debug konsolunuz bunu belirtir.
  • Türetilmiş rolleri çizildikleri her yüzeyde taban sınırlarını hâlâ aşamayan yayınlanmış bir tema bütünüyle elenir ve Rendel derlediğiniz temayı işler. Bu durum nadirdir ve sessizce gerçekleşir: kaydetme işlemi çalışır ve uygulama kendi renklerini korur. Yayınladığınız bir palet görünmüyorsa ilk kontrol edilecek şey budur; surface, surfaceRaised ve surfaceSunk arasındaki farkı açtığınızda sorun çözülür.

Yönetim paneli artık balon renklerini yayınlamaz. Yanıtlar sayfalara dönüşmeden önce kaydedilmiş bir balon renk çifti, bir sonraki kaydetmenizde kaldırılır.

Müşterinin markası, erişilebilirlik taban sınırı etrafından dolanılarak değil, her zaman bu sınır gözetilerek uygulanır. Taban sınırın zorunlu kılındığı yer cihazdır; yönetim paneli yalnızca ne yapacağını söyler.

Kasıtlı olarak yayınlanmayanlar

Yayınlanabilir anahtarlar herkese açıktır. rd_pk_live_... ikili dosyanızın içinde yer alır ve herkes bunu ayıklayabilir; bu nedenle bu iletim hattındaki her şey yapısal olarak herkese açıktır. Buradaki kriter “müşteri bunu dert eder mi?” değil, “uygulamanın herhangi bir kullanıcısı bunu zaten görebiliyor mu?” sorusudur ve yukarıdaki her alan uygulamanın ekranda çizdiği bir şeydir.

Kasıtlı olarak dışarıda bırakılanlar:

  • Personanız. İsim, üslup, talimatlar ve güvenlik sınırları. Prompt, üründeki kopyalanması en kolay şeydir ve asla iletim hattında bulunmaz.
  • Bilgi kaynaklarınız, bunların URL'leri ve içerikleri.
  • Kendi aksiyon kayıt defteriniz, risk seviyeleri ve etkinleştirme bayrakları. Bir asistanın ne yapabileceğini sunucu her turda yanıtlar, cihaza yayınlanmaz.
  • Plan, limitler, kullanım ve faturalandırma durumu.
  • Herhangi bir kişiyi, diğer uygulamalarınızı veya organizasyonunuzu adlandıran her şey.
  • SDK'nın getireceği herhangi bir URL. Yazı tipleri adlandırılır, asla bağlantı verilmez: cihazın güvendiği bir veri yükündeki uzak yazı tipi URL'si, başka birinin uygulamasında bir takip pikseli olmaktan yalnızca bir yönlendirme uzaklıktadır. İkili dosyanızın hâlihazırda içerdiği bir aileyi adlandırın; içermiyorsa Flutter varsayılana döner ve hiçbir şey bozulmaz.

Kullanılabilirlik anahtarı bir güvenlik kontrolü değil, bir kolaylıktır. Eyleme davetin çizilmesini durdurur. Bir uygulamayı askıya almak ise API'nin yanıt vermesini tamamen durduran ayrı bir sunucu tarafı kontroldür.