İzinler API'si

Home API'lerinden herhangi birini kullanmadan önce uygulamanın, kullanıcının evinde bulunan cihazlara (API'de yapı olarak adlandırılır) erişme izni olmalıdır. Kullanıcı, Permissions API ile Google Hesabını kullanarak Home API'leri uygulamalarına evlerindeki cihazlara erişim izni verebilir.

Permissions API'yi entegre etme

Devam etmeden önce Evi başlatma bölümünü uyguladığınızdan emin olun. Bu adımdaki homeManager örneği, buradaki tüm izin örneklerinde kullanılır.

Öncelikle SDK'ya bir ActivityResultCaller kaydedin. Örneğin, örnek uygulama bu durumu şu şekilde ele alır:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    homeManager.registerActivityResultCallerForPermissions(this)
  }

İzinleri kontrol etme

İzin istemeden önce, uygulamanın kullanıcısının izin verip vermediğini kontrol etmenizi öneririz. Bunun için, Home örneğinin hasPermissions() yöntemini çağırarak PermissionsState değerinden oluşan bir Flow elde edin:

val permissionsReadyState =
  homeManager.hasPermissions().collect { state ->
    state == PermissionsState.GRANTED ||
      state == PermissionsState.PERMISSIONS_STATE_UNAVAILABLE ||
      state == PermissionsState.NOT_GRANTED
    when (permissionsReadyState) {
      PermissionsState.GRANTED -> println("Permissions granted, no need to request permissions")
      PermissionsState.PERMISSIONS_STATE_UNAVAILABLE ->
        println("Permissions state unavailable, request permissions")
      PermissionsState.NOT_GRANTED ->
        println("OAuth permission is enabled but not granted yet, request permissions")
      else ->
        throw IllegalStateException(
          "HomeClient.hasPermissions state should be PermissionsState.GRANTED or " +
            "PermissionsState.PERMISSIONS_STATE_UNAVAILABLE")
  }
}

Kontrol, NOT_GRANTED veya PERMISSIONS_STATE_UNAVAILABLE değerinde bir PermissionsState döndürüyorsa izin isteğinde bulunmanız gerekir. Kontrol, GRANTED değerinde bir PermissionsState döndürür ancak structures() için yapılan sonraki bir çağrıda yapı döndürülmezse kullanıcı, Google Home app (GHA) ayarlar sayfası üzerinden uygulamaya erişimi iptal etmiş demektir ve izin isteğinde bulunmanız gerekir. Aksi takdirde, kullanıcının zaten erişimi olmalıdır.

İzin isteme

Belirli bir yapıdaki yapılara ve cihazlara erişmek için uygulamanıza izin verilmelidir.

Kullanıcı henüz izin vermediyse İzinler kullanıcı arayüzünü başlatmak ve sonucu işlemek için Ana Sayfa örneğinin requestPermissions() yöntemini kullanın:

fun requestPermissions(scope: CoroutineScope, onShowSnackbar: (String) -> Unit) {
  scope.launch {
    val result =
      try {
        homeManager.requestPermissions()
      } catch (e: HomeException) {
        PermissionsResult(
          PermissionsResultStatus.ERROR,
          "Got HomeException with error: ${e.message}",
        )
      }
    when (result.status) {
      PermissionsResultStatus.SUCCESS -> {
        Log.i(TAG, "Permissions successfully granted.")
      }
      PermissionsResultStatus.CANCELLED -> {
        Log.i(TAG, "User cancelled Permissions flow.")
        onShowSnackbar("User cancelled Permissions flow")
      }
      else -> {
        Log.e(
          TAG,
          "Failed to grant permissions with error: ${result.status}, ${result.errorMessage}",
        )
        onShowSnackbar("Failed to grant permissions with error: ${result.errorMessage}")
      }
    }
  }
}

İzinler kullanıcı arayüzünün düzgün şekilde başlatılması için uygulamanız için OAuth'u ayarlamanız gerekir.

İzin verin

Artık uygulamanızı çalıştırabilir ve kullanıcıların izin vermesini sağlayabilirsiniz. İzin verebilecek kullanıcı türleri ve izin verilebilen cihaz türleri, uygulamanızı Google Home Developer Console'e kaydettirmiş olmanıza bağlı olarak farklılık gösterir.

Home API'lerini kullanarak uygulama yayınlamak için Developer Console kaydı gereklidir. Home API'lerini test etmek ve kullanmak gerekli değildir.

Developer Console'a kayıtlı olmayan uygulamalar doğrulanmamış durumda olur. Home API'lerinin kullanımını test etmek için aşağıdakiler önerilir:

  • Uygulama için izin verebilecek kullanıcılar yalnızca OAuth konsolunda test kullanıcısı olarak kayıtlı kullanıcılardır. Doğrulanmamış uygulamalar için 100 test kullanıcısı sınırı vardır.

  • Doğrulanmamış bir uygulama, Home API'leri için OAuth tarafından desteklenen tüm cihaz türlerine (Developer Console'teki cihaz türlerinin listesi) erişebilir. Bir yapıdaki tüm cihazlara erişim izni verilir.

Developer Console 'e kayıtlı bir uygulama, bir veya daha fazla cihaz türüne erişim için onaylandıysa ve OAuth için marka doğrulaması tamamlandıysa doğrulanmış durumunda olur. Bir uygulamayı üretime sunmak için bu durum gereklidir:

  • Test kullanıcısı sınırları artık geçerli değildir. Tüm kullanıcılar uygulamaya izin verebilir.
  • Kullanıcı yalnızca Developer Console'te onaylanan cihaz türlerine izin verebilir.

OAuth ayarlandıktan sonra uygulamanın requestPermissions()'e yaptığı çağrı aşağıdaki iletişim kutularını tetikler:

  1. Kullanıcıdan kullanmak istediği Google Hesabı'nı seçmesi istenir.
  2. Kullanıcıdan, uygulamaya erişim izni vermek istediği yapıyı seçmesi istenir.
    1. Doğrulanmamış bir uygulama, Home API'leri tarafından desteklenen tüm cihaz türlerini kullanabilir.
    2. Doğrulanmış bir uygulama için kullanıcı yalnızca Developer Console'te onaylanmış cihaz türlerine izin verebilir.
    3. Uygulamanın yönetme erişimi olan hassas cihaz türleri için kullanıcı, erişimi cihaz başına kısıtlayabilir. Örneğin, üç kilidi olan bir kullanıcı bu kilitlerden yalnızca birine erişim izni verebilir.
  • OAuth izni - hesap seçin
  • OAuth consent - link devices 01
  • OAuth consent - link device 02
Şekil 1: Örnek OAuth izin akışı

İzin verildikten sonra uygulama, yapıdaki cihazların durumunu okumak ve kontrol etmek için Home API'lerini kullanabilir. Kullanıcı, uygulamaya belirli bir cihaz türü veya hassas cihaz için izin vermezse uygulama, cihaza erişmek, cihazı kontrol etmek veya otomatikleştirmek için Home API'lerini kullanamaz.

İzinleri değiştir

Farklı bir yapıdaki cihazlara erişim izni vermek için hesap seçiciyi başlatarak kullanıcının geçiş yapacağı Google Hesabı'nı ve yapıyı seçmesine izin verilebilir. Bu işlem sırasında, daha önce izin verilmiş olsa bile kullanıcıya izin ekranı tekrar gösterilir.

Bu işlem, forceLaunch işaretçisi true olarak ayarlanmış şekilde requestPermissions() işlevi tekrar çağrılarak yapılabilir:

homeManager.requestPermissions(forceLaunch=true)

İzinleri iptal etme

Kullanıcılar daha önce verilen erişimi iptal edebilir:

  1. Google Hesaplarım sayfası > Veriler ve gizlilik > Üçüncü taraf uygulamaları ve hizmetleri'ni kullanarak. Bu işlem, ilk izin verildiğinde verilen OAuth jetonunu iptal eder ve kullanıcının tüm platformlarda (telefonlar) ve yapılarda kullandığı uygulama örneğine erişimi iptal eder.

  2. GHA > Ayarlar > Bağlı Uygulamalar sayfasından GHA bölümündeki simgesini tıkladığınızda Ayarlar sayfasına yönlendirilirsiniz. Buradan Bağlı Uygulamalar kartını tıklayın. Bu kart sizi izin ekranına benzer bir sayfaya yönlendirir. Kullanıcı bu sayfadan uygulamaya erişimi kaldırabilir. Aynı sayfayı kullanarak uygulamanın hangi cihaz türlerine veya belirli hassas cihazlara erişebileceğini değiştirebilir.

  3. Doğrudan web'deki Bağlı Uygulamalar sayfası üzerinden.

OkGoogle izinleri

okGoogle komutu, yapı düzeyinde bir komuttur ve yapıdaki herhangi bir cihazı otomatikleştirmek için kullanılabilir. Ancak Home API'leri uygulamaları her cihaza erişemeyebilir. Aşağıdaki tabloda, bu tür durumlarda izinlerin nasıl uygulandığı açıklanmaktadır.

Otomasyon Özellik İzin yaptırımı
Saat 22:00'de yatak odası hoparlöründe "Uyku vakti" anonsu yapılsın. AssistantBroadcastTrait cihazda. Otomasyon oluşturma:
  • Yayın cihazı bir Asistan cihazı olmalıdır.
  • Uygulamanın ve kullanıcının, yayının yapıldığı cihaza erişimi olmalıdır.
Otomasyon yürütme:
  • Uygulamanın ve kullanıcının, yayının yapıldığı cihaza erişimi olmalıdır.
22:00'de tüm cihazlarda "Uyku Vakti" anonsunu yayınlayın AssistantBroadcastTrait yapısını seçin. Otomasyon oluşturma:
  • Yapıda, uygulamanın ve kullanıcının erişebildiği en az bir Asistan cihazı olmalıdır.
  • Uygulamanın ve kullanıcının yapıya erişimi olmalıdır.
Otomasyon yürütme:
  • Uygulamanın ve kullanıcının yapıya erişimi olmalıdır.
22:00'de "müzik çal" AssistantFulfillmentTrait.OkGoogleCommand Otomasyon oluşturma:
  • Uygulama ve kullanıcının, kullanıcının tüm cihazlarına (kameralar hariç) erişimi olmalıdır.
Otomasyon yürütme:
  • Uygulamanın ve kullanıcının, işlemin gerçekleştiği tüm cihazlara erişimi olmalıdır.
Birisi "müzik çal" dediğinde VoiceStarterTrait.OkGoogleEvent Otomasyon oluşturma:
  • Uygulama ve kullanıcının, yapıya ve en az bir Asistan cihazına erişimi olmalıdır.
Otomasyon yürütme:
  • Uygulamanın, otomasyonu başlatan cihaza erişmek için izin alması gerekmez.
  • Uygulamanın ve kullanıcının, işlemin gerçekleştiği cihaza erişme izni olmalıdır.