অ্যান্ড্রয়েডে অনুমতি API

অ্যান্ড্রয়েডের জন্য যেকোনো হোম এপিআই ব্যবহার করার আগে, অ্যাপটির ব্যবহারকারীর হোমে থাকা ডিভাইসগুলিতে অ্যাক্সেসের অনুমতি থাকতে হবে, যা API-তে কাঠামো হিসাবে উল্লেখ করা হয়েছে। Permissions API-এর মাধ্যমে, ব্যবহারকারী তাদের Google অ্যাকাউন্ট ব্যবহার করে হোম এপিআই অ্যাপগুলিকে তাদের বাড়ির ডিভাইসগুলিতে অ্যাক্সেস দিতে পারেন।

অনুমতি প্রবাহ ব্যবহারকারীকে Google Home app (GHA) ব্যবহার না করেই একটি কাঠামো তৈরি করতে দেয় যদি ইতিমধ্যেই এটি সেট আপ না করা থাকে।

অনুমতি API ইন্টিগ্রেট করুন

চালিয়ে যাওয়ার আগে, নিশ্চিত করুন যে আপনি Android এ হোম চালু করেছেন। এই ধাপ থেকে homeManager ইনস্ট্যান্সটি এখানে সমস্ত অনুমতি উদাহরণে ব্যবহৃত হয়েছে।

প্রথমে, SDK-এর সাথে একটি ActivityResultCaller নিবন্ধন করুন। উদাহরণস্বরূপ, Sample App এটি কীভাবে পরিচালনা করে:

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

অনুমতি পরীক্ষা করুন

অনুমতির অনুরোধ করার আগে, আমরা আপনাকে অ্যাপের ব্যবহারকারী ইতিমধ্যেই কাঠামো অ্যাক্সেস করার জন্য সম্মতি দিয়েছেন কিনা তা পরীক্ষা করার পরামর্শ দিচ্ছি। এটি করার জন্য, Home ইনস্ট্যান্সের hasPermissions() পদ্ধতিতে কল করে PermissionsState মানগুলির একটি Flow পান:

val permissionsReadyState =
homeManager.hasPermissions().collect { state ->
    when (state) {
      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")

      PermissionsState.PERMISSIONS_STATE_UNINITIALIZED -> println(
          "Permissions state is not initialized yet. Clients should wait for another status update"
      )
      else ->
          throw IllegalStateException("""
            HomeClient.hasPermissions state should be PermissionsState.GRANTED,
            PermissionState.PERMISSIONS_STATE_UNINITIALIZED, or
            PermissionsState.PERMISSIONS_STATE_UNAVAILABLE. Actual state: $state
          """.trimIndent())
    }
}

যদি চেকটি PermissionsState of NOT_GRANTED অথবা PERMISSIONS_STATE_UNAVAILABLE ফেরত দেয়, তাহলে এর অর্থ হল ব্যবহারকারী অথবা অ্যাপ্লিকেশনের স্ট্রাকচারে অ্যাক্সেস নেই। যদি চেকটি PermissionsState of GRANTED ফেরত দেয় কিন্তু পরবর্তী কল to structures() কোনও স্ট্রাকচার ফেরত না দেয়, তাহলে হয় ব্যবহারকারী GHA সেটিংস পৃষ্ঠার মাধ্যমে অ্যাপটিতে অ্যাক্সেস প্রত্যাহার করেছেন, অথবা ব্যবহারকারীর প্রয়োজনীয় অ্যাক্সেস নেই।

অনুমতির জন্য অনুরোধ করুন

একটি নির্দিষ্ট কাঠামোর মধ্যে থাকা কাঠামো এবং ডিভাইসগুলিতে অ্যাক্সেস করার জন্য আপনার অ্যাপকে অনুমতি দিতে হবে।

যদি ব্যবহারকারী ইতিমধ্যেই অনুমতি না দিয়ে থাকেন, তাহলে Home ইনস্ট্যান্সের requestPermissions() পদ্ধতি ব্যবহার করে Permissions UI চালু করুন এবং ফলাফল প্রক্রিয়া করুন:

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

Permissions UI সঠিকভাবে চালু করার জন্য, আপনার অ্যাপের জন্য ইতিমধ্যেই OAuth সেট আপ করা আবশ্যক।

অনুমতি দিন

এখন তুমি তোমার অ্যাপটি চালাতে পারবে এবং একজন ব্যবহারকারীর অনুমতি পেতে পারবে। কোন ধরণের ব্যবহারকারী অনুমতি দিতে পারবেন এবং কোন ধরণের ডিভাইসের জন্য অনুমতি দেওয়া যাবে, তা নির্ভর করবে তুমি Google Home Developer Console তোমার অ্যাপটি নিবন্ধিত করেছো কিনা তার উপর।

হোম এপিআই ব্যবহার করে অ্যাপ প্রকাশ করার জন্য Developer Console নিবন্ধন প্রয়োজন। হোম এপিআই পরীক্ষা এবং ব্যবহার করার জন্য এটির প্রয়োজন নেই।

যদি কোনও অ্যাপ Developer Console নিবন্ধিত না থাকে , তাহলে এটি যাচাই না করা অবস্থায় থাকবে। হোম API-এর ব্যবহারের পরীক্ষার জন্য এটি সুপারিশ করা হয়:

  • শুধুমাত্র OAuth কনসোলে পরীক্ষামূলক ব্যবহারকারী হিসেবে নিবন্ধিত ব্যবহারকারীরাই অ্যাপটির জন্য অনুমতি দিতে পারবেন। যাচাই না করা অ্যাপের জন্য ১০০ জন পরীক্ষামূলক ব্যবহারকারীর সীমা রয়েছে।

  • একটি যাচাই না করা অ্যাপের যেকোনো ডিভাইসের ধরণের ডিভাইসে অ্যাক্সেস থাকবে যা হোম API-এর জন্য OAuth দ্বারা সমর্থিত ( Developer Console ডিভাইসের ধরণের তালিকা)। একটি কাঠামোর সমস্ত ডিভাইস অনুমোদিত হবে।

যদি কোনও অ্যাপ Developer Console নিবন্ধিত থাকে এবং এক বা একাধিক ডিভাইস প্রকারের অ্যাক্সেসের জন্য অনুমোদিত হয়েছে, এবং OAuth এর জন্য ব্র্যান্ড যাচাইকরণ সম্পন্ন হয়েছে , এটি একটি যাচাইকৃত অবস্থায় থাকবে। উৎপাদনে একটি অ্যাপ চালু করার জন্য এই অবস্থা প্রয়োজন:

  • পরীক্ষামূলক ব্যবহারকারীর সীমা আর প্রযোজ্য নয়। যেকোনো ব্যবহারকারী অ্যাপটিকে অনুমতি দিতে পারবেন।
  • ব্যবহারকারী শুধুমাত্র Developer Console অনুমোদিত ডিভাইসের প্রকারগুলিকেই অনুমতি দিতে পারবেন।

এখন OAuth সেট আপ হয়ে গেছে, অ্যাপের requestPermissions() কল নিম্নলিখিত ডায়ালগগুলিকে ট্রিগার করে:

  1. ব্যবহারকারীকে তাদের ব্যবহার করা গুগল অ্যাকাউন্টটি নির্বাচন করতে বলা হবে।
  2. ব্যবহারকারীকে অ্যাপটিকে যে কাঠামোতে অ্যাক্সেস দিতে চান তা নির্বাচন করতে বলা হবে।
    1. একটি অযাচাইকৃত অ্যাপের জন্য, হোম এপিআই দ্বারা সমর্থিত সমস্ত ধরণের ডিভাইস অ্যাপটিতে উপলব্ধ।
    2. একটি যাচাইকৃত অ্যাপের জন্য, ব্যবহারকারী শুধুমাত্র Developer Console অনুমোদিত ডিভাইসের প্রকারগুলিকেই অনুমতি দিতে পারেন।
    3. সংবেদনশীল ডিভাইসের ধরণগুলির জন্য যেগুলি পরিচালনা করার অ্যাক্সেস অ্যাপের আছে, ব্যবহারকারী প্রতি ডিভাইসের ভিত্তিতে অ্যাক্সেস সীমাবদ্ধ করতে পারেন। উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারীর তিনটি লক থাকে, তবে তারা কেবল সেই লকগুলির মধ্যে একটিতে অ্যাক্সেস দিতে পারে।
  • OAuth সম্মতি - অ্যাকাউন্ট নির্বাচন করুন
  • OAuth সম্মতি - ডিভাইস লিঙ্ক করুন ০১
  • OAuth সম্মতি - ডিভাইস ০২ লিঙ্ক করুন
চিত্র ১ : OAuth সম্মতি প্রবাহের উদাহরণ

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

অনুমতি পরিবর্তন করুন

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

forceLaunch ফ্ল্যাগটি true তে সেট করে requestPermissions() আবার কল করে এটি করা যেতে পারে:

homeManager.requestPermissions(forceLaunch=true)

অনুমতি প্রত্যাহার করুন

ব্যবহারকারীরা পূর্বে মঞ্জুর করা অ্যাক্সেস প্রত্যাহার করতে পারেন:

  1. Google MyAccounts পৃষ্ঠা > Data & privacy > Third-party apps & services এর মাধ্যমে। এটি প্রাথমিক সম্মতি মঞ্জুর করার সময় জারি করা OAuth টোকেনটি প্রত্যাহার করবে এবং ব্যবহারকারী সমস্ত পৃষ্ঠ (ফোন) এবং কাঠামো জুড়ে যে অ্যাপটি ব্যবহার করছিলেন তার যেকোনো উদাহরণে অ্যাক্সেস প্রত্যাহার করবে।

    নিম্নলিখিত URL স্কিম ব্যবহার করে ব্যবহারকারীকে তৃতীয় পক্ষের অ্যাপস এবং পরিষেবা উপ-পৃষ্ঠায় একটি গভীর লিঙ্ক দিয়ে নির্দেশিত করা যেতে পারে:

    https://myaccount.google.com/connections/link?project_number=Cloud project_number
    
  2. GHA > সেটিংস > লিঙ্কড অ্যাপস পৃষ্ঠার মাধ্যমে। GHA তে ক্লিক করলে আপনাকে সেটিংস পৃষ্ঠায় নিয়ে যাওয়া হবে। সেখান থেকে, লিঙ্কড অ্যাপস টাইলে ক্লিক করুন যা আপনাকে সম্মতি স্ক্রিনের মতো দেখতে একটি পৃষ্ঠায় নিয়ে যাবে। এই পৃষ্ঠা থেকে ব্যবহারকারী অ্যাপের অ্যাক্সেস সরিয়ে ফেলতে পারবেন। ব্যবহারকারী এই একই পৃষ্ঠাটি ব্যবহার করে কোন ধরণের ডিভাইস বা নির্দিষ্ট সংবেদনশীল ডিভাইস অ্যাপে অ্যাক্সেসযোগ্য তা পরিবর্তন করতে পারবেন।

গুগল হোম ইকোসিস্টেমে, বেশিরভাগ ডিভাইসের ধরণের ক্ষেত্রে, ব্যবহারকারীরা একই ধরণের সমস্ত ডিভাইসের জন্য একবারে অনুমতি দিতে পারেন। লক, ক্যামেরা বা ডোরবেলের মতো সংবেদনশীল বা সীমাবদ্ধ ডিভাইসের ধরণের ক্ষেত্রে, ব্যবহারকারীদের অবশ্যই তাদের পৃথকভাবে অনুমতি দিতে হবে।

কোনও ব্যবহারকারী কোনও সংবেদনশীল বা সীমাবদ্ধ ডিভাইসের ধরণ অ্যাক্সেস করার অনুমতি দিয়েছেন কিনা তা নির্ধারণ করতে, Structure-level consentedDeviceTypes() ফাংশনটি ব্যবহার করুন:

import com.google.home.Structure
import com.google.home.DeviceType
import com.google.home.DeviceTypeFactory
import com.google.home.consentedDeviceTypes // Extension function from the SDK
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch

/**
 * Example of how an app may monitor which device types have been granted access by a user.
 */
fun monitorDeviceConsent(structure: Structure, myScope: CoroutineScope) {
    // Obtain the flow of consented device type factories
    val consentedTypesFlow: Flow<Set<DeviceTypeFactory<out DeviceType>>> =
        structure.consentedDeviceTypes()

    myScope.launch {
        consentedTypesFlow.collect { consentedSet ->
            // Check if the user has consented to share a specific restricted
            // type, such as a Doorbell or Camera.
            val hasCameraAccess = consentedSet.any {
                it.toString() == "matter.google.type.GoogleDoorbellDevice"
            }

            if (hasCameraAccess) {
                // Enable features that require camera access
            } else {
                // Inform the user or disable camera-specific features
            }
        }
    }
}

OkGoogle অনুমতি

okGoogle কমান্ডটি একটি ডিভাইস-স্তরের কমান্ড এবং এটি কাঠামোর যেকোনো ডিভাইস স্বয়ংক্রিয় করতে ব্যবহার করা যেতে পারে। তবে, একটি Home APIs অ্যাপের প্রতিটি ডিভাইসে অ্যাক্সেস নাও থাকতে পারে। নিম্নলিখিত টেবিলে বর্ণনা করা হয়েছে যে এই ধরনের ক্ষেত্রে অনুমতি কীভাবে প্রয়োগ করা হয়।

অটোমেশন বৈশিষ্ট্য অনুমতি প্রয়োগ
রাত ১০:০০ টায়, শোবার ঘরের স্পিকারে "শোবার সময়" সম্প্রচার করুন। ডিভাইসে AssistantBroadcastTrait অটোমেশন তৈরি :
  • ব্রডকাস্ট ডিভাইসটি অবশ্যই একটি Assistant ডিভাইস হতে হবে।
  • যে ডিভাইসে সম্প্রচারটি করা হচ্ছে, অ্যাপ এবং ব্যবহারকারীর সেই ডিভাইসে অ্যাক্সেস থাকতে হবে।
অটোমেশন এক্সিকিউশন :
  • যে ডিভাইসে সম্প্রচারটি করা হচ্ছে, অ্যাপ এবং ব্যবহারকারীর সেই ডিভাইসে অ্যাক্সেস থাকতে হবে।
রাত ১০:০০ টায়, সমস্ত ডিভাইসে "শোবার সময়" সম্প্রচার করুন AssistantBroadcastTrait বৈশিষ্ট্য। অটোমেশন তৈরি :
  • অ্যাপ এবং ব্যবহারকারীর অ্যাক্সেসের জন্য কাঠামোতে কমপক্ষে একটি Assistant ডিভাইস থাকতে হবে।
  • অ্যাপ এবং ব্যবহারকারীর অবশ্যই কাঠামোটিতে অ্যাক্সেস থাকতে হবে।
অটোমেশন এক্সিকিউশন :
  • অ্যাপ এবং ব্যবহারকারীর অবশ্যই কাঠামোটিতে অ্যাক্সেস থাকতে হবে।
রাত ১০:০০ টায়, "কিছু গান বাজাও" AssistantFulfillmentTrait.OkGoogleCommand অটোমেশন তৈরি :
  • অ্যাপ এবং ব্যবহারকারীর অবশ্যই সেই ডিভাইসগুলিতে অ্যাক্সেস থাকতে হবে যেখানে অটোমেশন কমান্ড জারি করে।
অটোমেশন এক্সিকিউশন :
  • অ্যাপ এবং ব্যবহারকারীর অবশ্যই সেই ডিভাইসগুলিতে অ্যাক্সেস থাকতে হবে যেখানে অটোমেশন কমান্ড দেয়।
যখনই কেউ বলে "কিছু গান বাজাও" VoiceStarterTrait.OkGoogleEvent অটোমেশন তৈরি :
  • অ্যাপ এবং ব্যবহারকারীর অবশ্যই কাঠামোতে অ্যাক্সেস থাকতে হবে। অটোমেশনের জন্য বৈধতা পাস করতে বা চালানোর জন্য কোনও অ্যাসিস্ট্যান্ট ডিভাইসের প্রয়োজন হয় না, কারণ কাঠামোতে অ্যাক্সেস থাকা যেকোনো ব্যবহারকারী তাদের ফোন (একই গুগল অ্যাকাউন্ট ব্যবহার করে) অ্যাসিস্ট্যান্টের সাথে যুক্ত হতে এবং ভয়েসস্টার্টার ট্রিগার করতে পারেন।
অটোমেশন এক্সিকিউশন :
  • অটোমেশন শুরু করে এমন ডিভাইসটি অ্যাক্সেস করার জন্য অ্যাপটির অনুমতির প্রয়োজন হয় না।
  • যে ডিভাইসে এই ক্রিয়াটি ঘটে, সেই ডিভাইসে অ্যাক্সেস করার জন্য অ্যাপ এবং ব্যবহারকারীর অবশ্যই অনুমতি থাকতে হবে।

ব্যবহারকারী সম্পূর্ণ অনুমতি প্রত্যাহার করলে নির্দেশিকা

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

প্রতিবার অ্যাপটি চালু করার সময়, নিশ্চিত করুন যে অনুমতিগুলি এখনও কার্যকর আছে কিনা। যদি সেগুলি বাতিল করা হয়ে থাকে, তাহলে নিশ্চিত করুন যে অ্যাপ্লিকেশনটিতে ক্যাশে থাকা যেকোনো ডেটা সহ পূর্ববর্তী সমস্ত ডেটা মুছে ফেলা হয়েছে।