Android'de evi başlatma

Android için Home API'lerinden herhangi birini kullanmadan önce uygulamanızda evi başlatmanız gerekir. Bu adımda, yerel bağlam için singleton örneğiHome oluşturacaksınız.

Aynı anda yalnızca bir Home örneği etkin olmalıdır.

Bu, Home API'lerinin giriş noktasıdır. Ayrıca, Cihaz ve Yapı ile Otomasyon API'lerinde hangi özellikleri ve cihaz türlerini kullanmayı planladığınızı da bildirmeniz gerekir. Google Home ekosistemini kullanmaya yeni başlıyorsanız ve hangi özellikleri veya cihaz türlerini kaydettireceğinizden emin değilseniz bu kılavuzda en yaygın olanlardan bazılarını önerdik.

Home örneği oluşturma

Başlamak için şu paketleri uygulamanıza aktarın:

import android.content.Context
import com.google.home.FactoryRegistry
import com.google.home.HomeConfig
import com.google.home.Home

Home API'lerini başlatmak için:

  1. Application bağlamına referans alın. Bu bağlam, herhangi bir etkinlik yaşam döngüsüne bağlı değildir ve uygulamanız çalıştığı sürece geçerli olur. Kodu, Activity veya Service içinde getApplicationContext() numarasını arayarak alabilirsiniz:

    val context = getApplicationContext()
    
  2. Uygulamanızda kullanmayı planladığınız tüm özellikler ve cihaz türleriyle bir FactoryRegistry örneği oluşturun.

    Neye ihtiyacınız olduğundan emin değilseniz bu kılavuzda bazı yaygın olanları (Işık, Fiş, Sensör, Anahtar ve Termostat cihaz türleri, otomasyonlar için varlık ve Asistan özellikleri) önerdik. Daha fazla bilgi edinmek için Özelliklerin ve cihaz türlerinin kaydı başlıklı makaleyi inceleyin.

    val registry = FactoryRegistry(
      traits = listOf(
                AirQuality,
                AreaAttendanceState,
                AreaPresenceState,
                AssistantBroadcast,
                AssistantFulfillment,
                BooleanState,
                ColorControl,
                ExtendedColorControl,
                FlowMeasurement,
                IlluminanceMeasurement,
                LevelControl,
                Notification,
                OccupancySensing,
                OnOff,
                RelativeHumidityMeasurement,
                Switch,
                TemperatureMeasurement,
                Thermostat),
      types = listOf(
                AirQualitySensorDevice,
                ColorDimmerSwitchDevice,
                ColorTemperatureLightDevice,
                ContactSensorDevice,
                DimmableLightDevice,
                DimmablePlugInUnitDevice,
                DimmerSwitchDevice,
                ExtendedColorLightDevice,
                FlowSensorDevice,
                GenericSwitchDevice,
                HumiditySensorDevice,
                LightSensorDevice,
                OccupancySensorDevice,
                OnOffLightDevice,
                OnOffLightSwitchDevice,
                OnOffPluginUnitDevice,
                OnOffSensorDevice,
                SpeakerDevice,
                TemperatureSensorDevice,
                ThermostatDevice))
    

    Burada kayıtlı her bir özellik ve cihaz türü için içe aktarma ifadeleri gereklidir (Android Studio bu ifadeleri eklemenizi ister).

  3. HomeConfig öğesini Dispatchers.IO coroutine bağlamını ve kayıt örneğinizi kullanarak oluşturun.

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. Son olarak, bağlamı ve HomeConfig kullanarak API'lerin giriş noktası olan Home'nin singleton örneğini oluşturun.

    val homeManager: HomeClient = Home.getClient(context, homeConfig)
    

Geçersiz oturumlarla ilgili hataları önlemek için Home'ın yalnızca tekil bir örneğinin oluşturulması ve bunun bir nesne bildirimi içine sarmalanması önemlidir.

Örneğin, Sample App bunu şu şekilde yapar:

internal object HomeClientModule {
  @Provides
  @Singleton
  fun provideHomeClient(@ApplicationContext context: Context): HomeClient {
    return Home.getClient(
      context,
      HomeConfig(
        coroutineContext = IODispatcherModule.provideIoDispatcher(),
        factoryRegistry = registry,
      ),
    )
  }
}

Uygulama tarafından başlatılan Google ile Oturum Açma

Kullanıcınızın Google kimlik doğrulamalarını uygulamanızda yönetmek isteyebilirsiniz. Bu sayede, Google Home, Drive ve Haritalar gibi çeşitli Google hizmetlerinde aynı kullanıcı hesabını kullanabilirsiniz.

Uygulama tarafından başlatılan Google ile oturum açma özelliği sayesinde, belirli bir kullanıcıya açıkça bağlı bir HomeClient örneği elde edebilirsiniz. Böylece, hesap zaten yetkilendirilmişse Google Hesap seçici ve izin ekranı atlanır.

Ayrıca bu yaklaşım, kullanıcıların iki farklı hesap seçimi ekranı görmesini engeller. Bu ekranlardan biri uygulamanın oturum açma ekranı, diğeri ise Google Home'un ekranıdır.

Bunu yapmak için Ev örneği oluşturma bölümünde belirtilen adımları uygulayın. Ancak 4. adımda Home.getClient(context, homeConfig) yerine Home.getClient(context, userAccount, homeConfig) çağrısı yapın. Burada ikinci parametre Lazy<UserAccount>'dir. Bu, belirtilen Google Hesabı'na açıkça bağlı olan HomeClientWithProvidedAccount (HomeClient alt sınıfı) örneğini döndürür:

val client =
     Home.getClient(
       context = context.applicationContext,
       account =
         lazy {
         // 1. Create the Account object.
           val androidAccount = Account(userEmail,
                                        GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE)
         // 2. Wrap it in UserAccount.GoogleAccount.
           UserAccount.GoogleAccount(androidAccount)
         },
       homeConfig = HomeConfig()
     )

Belirtilen kullanıcı yetkili değilse HomeClientWithProvidedAccount örneğinde aşağıdaki yöntemleri çağırarak kullanıcıdan izin isteyin:

  1. registerActivityResultCallerForPermissions() ile kullanmak istediğiniz ActivityResultCaller'a referans verin.
  2. requestPermissions(). Bu işlem, kullanıcının izin verebileceği GHP izin ekranını açar.

UserAccount ile HomeClient oluşturabilir, ardından kullanıcıya izin verme işlemlerini güncelleme olanağı tanımak için izin ekranını tekrar başlatmak üzere requestPermissions() işlevini forceLaunch==true ile çağırabilirsiniz:

val client =
     Home.getClient(
       context = context.applicationContext,
       account =
         lazy {
              UserAccount.GoogleAccount(androidAccount)
         },
       homeConfig = HomeConfig()
     )

client.registerActivityResultCallerForPermissions(this)
client.requestPermissions(forceLaunch= true)

Ev API'leri izinlerini yönetme hakkında daha fazla bilgi için Permissions API başlıklı makaleyi inceleyin.

Özelliklerin ve cihaz türlerinin kaydı

FactoryRegistry sınıfı, geliştiricilerin uygulamaları tarafından kullanılan özellikleri ve cihaz türlerini açıkça belirtmelerine olanak tanıyarak uygulama ikili boyutlarını optimize etmelerine yardımcı olur.

İzinlerin ve fabrika kaydının birbirinden bağımsız olduğunu unutmayın. Bu nedenle, izinler kullanılarak uygulamanızda kullanılabilen ancak fabrika kayıt defterine dahil edilmeyen kayıtlı olmayan özelliklere ve türlere Automation API kullanılarak erişilemez. Ayrıca, toplu traits() veya types() yöntem çağrıları sırasında da döndürülmezler.