অনুমতি API

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

পারমিশন এপিআই ইন্টিগ্রেট করুন

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

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

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

অনুমতির জন্য চেক করুন

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

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

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

অনুমতি অনুরোধ

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

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

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

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

অনুমতি দিন

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

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

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

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

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

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

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

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

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

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

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

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

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

homeManager.requestPermissions(forceLaunch=true)

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

ব্যবহারকারীরা পূর্বে দেওয়া অ্যাক্সেস প্রত্যাহার করতে পারেন:

  1. Google MyAccounts পৃষ্ঠা > ডেটা এবং গোপনীয়তা > তৃতীয় পক্ষের অ্যাপ ও পরিষেবার মাধ্যমে। এটি OAuth টোকেনটিকে প্রত্যাহার করবে যা প্রাথমিক সম্মতি প্রদানের সময় ইস্যু করা হয়েছিল এবং ব্যবহারকারী সমস্ত পৃষ্ঠায় (ফোন) এবং কাঠামো জুড়ে ব্যবহার করা অ্যাপের যেকোন উদাহরণে অ্যাক্সেস প্রত্যাহার করবে।

  2. GHA > সেটিংস > লিঙ্কড অ্যাপস পৃষ্ঠার মাধ্যমে। GHA এর ক্লিক করলে সেটিংস পৃষ্ঠায় চলে যাবে। সেখান থেকে, লিঙ্কড অ্যাপস টাইলে ক্লিক করুন যা আপনাকে সম্মতি স্ক্রিনের মতো দেখতে একটি পৃষ্ঠায় নিয়ে যায়। এই পৃষ্ঠা থেকে ব্যবহারকারী অ্যাপের অ্যাক্সেস সরাতে পারেন। কোন ডিভাইসের ধরন বা নির্দিষ্ট সংবেদনশীল ডিভাইসগুলি অ্যাপটিতে অ্যাক্সেসযোগ্য তা পরিবর্তন করতে ব্যবহারকারী এই একই পৃষ্ঠাটি ব্যবহার করতে পারেন।

  3. সরাসরি ওয়েবে লিঙ্কড অ্যাপস পৃষ্ঠার মাধ্যমে।

OkGoogle অনুমতি

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

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