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:
- Kullanıcıdan kullanmak istediği Google Hesabı'nı seçmesi istenir.
- Kullanıcıdan, uygulamaya erişim izni vermek istediği yapıyı seçmesi istenir.
- Doğrulanmamış bir uygulama, Home API'leri tarafından desteklenen tüm cihaz türlerini kullanabilir.
- Doğrulanmış bir uygulama için kullanıcı yalnızca Developer Console'te onaylanmış cihaz türlerine izin verebilir.
- 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.
İ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:
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.
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.
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:
|
22:00'de tüm cihazlarda "Uyku Vakti" anonsunu yayınlayın |
AssistantBroadcastTrait
yapısını seçin. |
Otomasyon oluşturma:
|
22:00'de "müzik çal" |
AssistantFulfillmentTrait.OkGoogleCommand
|
Otomasyon oluşturma:
|
Birisi "müzik çal" dediğinde |
VoiceStarterTrait.OkGoogleEvent
|
Otomasyon oluşturma:
|