অ্যান্ড্রয়েডে হোম শুরু করুন

অ্যান্ড্রয়েডের জন্য যেকোনো হোম এপিআই ব্যবহার করার আগে, আপনার অ্যাপে হোমটি ইনিশিয়ালাইজ করতে হবে। এই ধাপে, আপনি স্থানীয় প্রসঙ্গের জন্য Home একটি সিঙ্গেলটন ইনস্ট্যান্স তৈরি করবেন।

একবারে Home শুধুমাত্র একটি ইনস্ট্যান্স সক্রিয় থাকা উচিত।

এটি হল হোম এপিআই-এর প্রবেশ বিন্দু এবং ডিভাইস ও স্ট্রাকচার এবং অটোমেশন এপিআই-এর সাথে আপনি কোন বৈশিষ্ট্য এবং ডিভাইসের ধরণগুলি ব্যবহার করতে চান তা ঘোষণা করাও এতে অন্তর্ভুক্ত। আপনি যদি সবেমাত্র গুগল হোম ইকোসিস্টেম দিয়ে শুরু করছেন এবং কোন বৈশিষ্ট্য বা ডিভাইসের ধরণগুলি নিবন্ধন করবেন তা নিশ্চিত না হন, তাহলে আমরা এই নির্দেশিকায় সবচেয়ে সাধারণ কিছু পরামর্শ দিয়েছি।

একটি হোম ইনস্ট্যান্স তৈরি করুন

শুরু করতে, আপনার অ্যাপে এই প্যাকেজগুলি আমদানি করুন:

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

হোম এপিআইগুলি আরম্ভ করতে:

  1. Application প্রসঙ্গের একটি রেফারেন্স পান। এই প্রসঙ্গের কোনও কার্যকলাপ জীবনচক্রের উপর নির্ভর করে না এবং আপনার অ্যাপ্লিকেশনটি যতক্ষণ জীবিত থাকবে ততক্ষণ এটি কার্যকর থাকবে। আপনি একটি Activity বা Service মধ্যে getApplicationContext() কল করে এটি পেতে পারেন:

    val context = getApplicationContext()
    
  2. আপনার অ্যাপে ব্যবহার করার জন্য আপনার পছন্দের সমস্ত বৈশিষ্ট্য এবং ডিভাইসের ধরণ সহ একটি FactoryRegistry ইনস্ট্যান্স তৈরি করুন।

    এই নির্দেশিকার জন্য, আমরা কিছু সাধারণ (আলো, প্লাগ, সেন্সর, সুইচ এবং থার্মোস্ট্যাট ডিভাইসের ধরণ, অটোমেশনের জন্য উপস্থিতি এবং সহকারী বৈশিষ্ট্য) পরামর্শ দিয়েছি, যদি আপনি নিশ্চিত না হন যে আপনার কী প্রয়োজন। আরও জানতে, বৈশিষ্ট্য এবং ডিভাইসের ধরণের নিবন্ধন দেখুন।

    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))
    

    এখানে নিবন্ধিত প্রতিটি স্বতন্ত্র বৈশিষ্ট্য এবং ডিভাইসের ধরণের জন্য আমদানি বিবৃতি প্রয়োজন ( Android Studio আপনাকে এগুলি যোগ করার জন্য অনুরোধ করবে)।

  3. Dispatchers.IO coroutine প্রসঙ্গ এবং আপনার রেজিস্ট্রি ইনস্ট্যান্স ব্যবহার করে একটি HomeConfig ইন্সট্যান্টিয়েট করুন।

    val homeConfig = HomeConfig(
            coroutineContext = Dispatchers.IO,
            factoryRegistry = registry)
    
  4. অবশেষে, context এবং HomeConfig ব্যবহার করে Home এর singleton ইনস্ট্যান্স তৈরি করুন, যা API গুলির এন্ট্রি পয়েন্ট।

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

অবৈধ সেশনের ত্রুটি এড়াতে, এটি গুরুত্বপূর্ণ যে শুধুমাত্র একটি সিঙ্গেলটন Home ইনস্ট্যান্স তৈরি করা হয় , এটি একটি অবজেক্ট ডিক্লেয়ারেশনে মোড়ানো হয়।

উদাহরণস্বরূপ, নমুনা অ্যাপ এটি এভাবে করে:

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

অ্যাপ-ইনিশিয়েটেড গুগল সাইন-ইন

আপনি আপনার অ্যাপের মধ্যেই আপনার ব্যবহারকারীর Google প্রমাণীকরণ পরিচালনা করতে চাইতে পারেন। এটি করার মাধ্যমে আপনি Google Home, Drive, Maps ইত্যাদির মতো বিভিন্ন Google পরিষেবা জুড়ে একই ব্যবহারকারী অ্যাকাউন্ট ব্যবহার করতে পারবেন।

অ্যাপ-ইনিশিয়েট করা গুগল সাইন-ইনের মাধ্যমে, আপনি একটি নির্দিষ্ট ব্যবহারকারীর সাথে স্পষ্টভাবে সংযুক্ত একটি HomeClient ইনস্ট্যান্স পেতে পারেন, যার ফলে অ্যাকাউন্টটি ইতিমধ্যেই অনুমোদিত থাকা অবস্থায় গুগল অ্যাকাউন্ট পিকার এবং সম্মতি স্ক্রিনকে বাইপাস করা যায়।

উপরন্তু, এই পদ্ধতি ব্যবহারকারীদের দুটি ভিন্ন অ্যাকাউন্ট নির্বাচন স্ক্রিন দেখতে বাধা দেয় - একটি অ্যাপের সাইন-ইন থেকে এবং অন্যটি গুগল হোম থেকে।

এটি করার জন্য, Create a Home instance -এ বর্ণিত একই ধাপগুলি অনুসরণ করুন, কিন্তু ধাপ ৪ -এ Home.getClient(context, homeConfig) কল করার পরিবর্তে, Home.getClient(context, userAccount, homeConfig) কল করুন, যেখানে দ্বিতীয় প্যারামিটারটি হল Lazy<UserAccount> । এটি HomeClientWithProvidedAccount এর একটি উদাহরণ প্রদান করে, যা HomeClient এর একটি উপশ্রেণী, যা স্পষ্টভাবে নির্দিষ্ট Google অ্যাকাউন্টের সাথে সংযুক্ত:

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()
     )

যদি নির্দিষ্ট ব্যবহারকারী অনুমোদিত না হন, তাহলে HomeClientWithProvidedAccount ইনস্ট্যান্সে নিম্নলিখিত পদ্ধতিগুলিতে কল করে ব্যবহারকারীর অনুমতির জন্য অনুরোধ করুন:

  1. registerActivityResultCallerForPermissions() ব্যবহার করুন, যেখানে ActivityResultCaller এর রেফারেন্স থাকবে।
  2. requestPermissions() । এটি GHP সম্মতি স্ক্রিনটি নিয়ে আসে, যেখানে ব্যবহারকারী তাদের অনুমতি দিতে পারেন।

আপনি একটি UserAccount দিয়ে একটি HomeClient তৈরি করতে পারেন এবং তারপর forceLaunch==true দিয়ে requestPermissions() কল করতে পারেন যাতে ব্যবহারকারী তাদের অনুমতিগুলি আপডেট করতে পারে এবং সম্মতি স্ক্রিনটি আবার চালু করতে পারেন:

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

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

হোম এপিআই অনুমতি পরিচালনা সম্পর্কে আরও তথ্যের জন্য অনুমতি API দেখুন।

বৈশিষ্ট্য এবং ডিভাইসের প্রকারের নিবন্ধন

FactoryRegistry ক্লাস ডেভেলপারদের তাদের অ্যাপের বাইনারি আকার অপ্টিমাইজ করতে সাহায্য করে, যাতে তারা স্পষ্টভাবে নির্দেশ করতে পারে যে তাদের অ্যাপ কোন বৈশিষ্ট্য এবং ডিভাইসের ধরণ ব্যবহার করছে।

মনে রাখবেন যে অনুমতি এবং ফ্যাক্টরি রেজিস্ট্রি আলাদা করা হয়েছে। অতএব, অনিবন্ধিত বৈশিষ্ট্য এবং প্রকারগুলি যা আপনার অ্যাপে অনুমতি ব্যবহার করে উপলব্ধ কিন্তু ফ্যাক্টরি রেজিস্ট্রিতে অন্তর্ভুক্ত নয়, অটোমেশন API ব্যবহার করে অ্যাক্সেসযোগ্য নয় এবং সেগুলি বাল্ক traits() বা types() পদ্ধতি কলগুলিতে ফেরত দেওয়া হয় না।