অনুমতি শুধুমাত্র সিস্টেম কার্যকারিতা অনুরোধ করার জন্য নয়। অন্যান্য অ্যাপগুলি কীভাবে আপনার অ্যাপের উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করতে পারে তাও আপনি সীমাবদ্ধ করতে পারেন।
এই নির্দেশিকা ব্যাখ্যা করে যে কীভাবে অন্য অ্যাপ ঘোষণা করা অনুমতির সেট চেক করতে হয়। অন্যান্য অ্যাপগুলি কীভাবে আপনার অ্যাপের সাথে ইন্টারঅ্যাক্ট করতে পারে তা সীমাবদ্ধ করতে আপনি কীভাবে কার্যকলাপ, পরিষেবা, সামগ্রী প্রদানকারী এবং সম্প্রচার রিসিভার কনফিগার করতে পারেন তাও নির্দেশিকা ব্যাখ্যা করে।
অন্য অ্যাপের অনুমতি পরীক্ষা করুন
অন্য অ্যাপ ঘোষিত অনুমতিগুলির সেট দেখতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করতে একটি ডিভাইস বা এমুলেটর ব্যবহার করুন:
- একটি অ্যাপের অ্যাপ তথ্য স্ক্রীন খুলুন।
অনুমতি নির্বাচন করুন। অ্যাপ পারমিশন স্ক্রিন লোড হয়।
এই স্ক্রীন অনুমতি গ্রুপের একটি সেট দেখায়। সিস্টেমটি অনুমতির সেটগুলিকে সংগঠিত করে যা একটি অ্যাপ এই গ্রুপগুলিতে ঘোষণা করেছে৷
অনুমতি পরীক্ষা করার জন্য অন্যান্য দরকারী উপায় আছে:
- একটি পরিষেবাতে কল করার সময়,
Context.checkCallingPermission()
এ একটি অনুমতি স্ট্রিং পাস করুন। এই পদ্ধতিটি একটি পূর্ণসংখ্যা প্রদান করে যা নির্দেশ করে যে বর্তমান কলিং প্রক্রিয়াতে সেই অনুমতি দেওয়া হয়েছে কিনা। মনে রাখবেন যে এটি শুধুমাত্র তখনই ব্যবহার করা যেতে পারে যখন আপনি অন্য কোনো প্রক্রিয়া থেকে আসা একটি কল নির্বাহ করছেন, সাধারণত কোনো পরিষেবা থেকে প্রকাশিত কোনো IDL ইন্টারফেসের মাধ্যমে বা অন্য কোনো প্রক্রিয়ায় প্রদত্ত অন্য কোনো উপায়ে। - অন্য প্রক্রিয়াটিকে একটি নির্দিষ্ট অনুমতি দেওয়া হয়েছে কিনা তা পরীক্ষা করতে, প্রক্রিয়াটি (PID)
Context.checkPermission()
এ পাস করুন। - অন্য একটি প্যাকেজ একটি নির্দিষ্ট অনুমতি দেওয়া হয়েছে কিনা তা পরীক্ষা করতে, প্যাকেজের নামটি
PackageManager.checkPermission()
এ পাস করুন।
আপনার অ্যাপের কার্যকলাপের সাথে মিথস্ক্রিয়া সীমাবদ্ধ করুন
অন্য কোন অ্যাপগুলি সেই Activity
শুরু করতে পারে তা সীমাবদ্ধ করতে ম্যানিফেস্টে <activity>
ট্যাগে android:permission
বৈশিষ্ট্যটি ব্যবহার করুন। Context.startActivity()
এবং Activity.startActivityForResult()
এর সময় অনুমতি চেক করা হয়। যদি কলকারীর প্রয়োজনীয় অনুমতি না থাকে, তাহলে একটি SecurityException
ঘটে।
আপনার অ্যাপের পরিষেবাগুলির সাথে মিথস্ক্রিয়া সীমাবদ্ধ করুন
ম্যানিফেস্টে <service>
ট্যাগে android:permission
এট্রিবিউট ব্যবহার করুন অন্য কোন অ্যাপগুলি শুরু করতে বা সংশ্লিষ্ট Service
আবদ্ধ হতে পারে তা সীমাবদ্ধ করতে। Context.startService()
, Context.stopService()
, এবং Context.bindService()
এর সময় অনুমতি চেক করা হয়। যদি কলকারীর প্রয়োজনীয় অনুমতি না থাকে, তাহলে একটি SecurityException
ঘটে।
আপনার অ্যাপের বিষয়বস্তু প্রদানকারীদের সাথে মিথস্ক্রিয়া সীমাবদ্ধ করুন
অন্য কোন অ্যাপ কোন ContentProvider
ডেটা অ্যাক্সেস করতে পারে তা সীমাবদ্ধ করতে <provider>
ট্যাগে android:permission
বৈশিষ্ট্য ব্যবহার করুন। (সামগ্রী প্রদানকারীদের কাছে তাদের কাছে একটি গুরুত্বপূর্ণ অতিরিক্ত নিরাপত্তা সুবিধা উপলব্ধ রয়েছে যাকে বলা হয় URI অনুমতি , যা নিম্নলিখিত বিভাগে বর্ণিত হয়েছে।) অন্যান্য উপাদানগুলির বিপরীতে, আপনি সামগ্রী প্রদানকারীদের জন্য দুটি পৃথক অনুমতি বৈশিষ্ট্য সেট করতে পারেন: android:readPermission
অন্য কোনটি সীমাবদ্ধ করে অ্যাপ্লিকেশানগুলি প্রদানকারীর কাছ থেকে পড়তে পারে এবং android:writePermission
সীমাবদ্ধ করে যে অন্য কোন অ্যাপগুলি এতে লিখতে পারে৷ মনে রাখবেন যে যদি কোনও প্রদানকারীকে পড়া এবং লেখার উভয় অনুমতি দিয়ে সুরক্ষিত করা হয়, তবে শুধুমাত্র লেখার অনুমতি ধারণ করা কোনও অ্যাপকে কোনও প্রদানকারীর কাছ থেকে পড়ার অনুমতি দেয় না।
যখন প্রদানকারী প্রথম পুনরুদ্ধার করা হয় এবং যখন একটি অ্যাপ প্রদানকারীর উপর ক্রিয়াকলাপ সম্পাদন করে তখন অনুমতিগুলি পরীক্ষা করা হয়। যদি অনুরোধ করা অ্যাপটির উভয়েরই অনুমতি না থাকে তবে একটি SecurityException
ঘটে। ContentResolver.query()
ব্যবহার করার জন্য পড়ার অনুমতি প্রয়োজন; ContentResolver.insert()
, ContentResolver.update()
বা ContentResolver.delete()
ব্যবহার করার জন্য লেখার অনুমতি প্রয়োজন। এই সমস্ত ক্ষেত্রে, প্রয়োজনীয় অনুমতি না রাখলে একটি SecurityException
হয়।
প্রতি-ইউআরআই ভিত্তিতে অ্যাক্সেস দিন
অন্যান্য অ্যাপগুলি কীভাবে আপনার অ্যাপের বিষয়বস্তু সরবরাহকারীদের অ্যাক্সেস করতে পারে তার উপর সিস্টেমটি আপনাকে অতিরিক্ত সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে। বিশেষ করে, আপনার বিষয়বস্তু প্রদানকারী তার সরাসরি ক্লায়েন্টদেরকে অন্যান্য অ্যাপের সাথে নির্দিষ্ট URI শেয়ার করার অনুমতি দিয়ে পড়ার এবং লেখার অনুমতি দিয়ে নিজেকে রক্ষা করতে পারে। এই মডেলের জন্য আপনার অ্যাপের সমর্থন ঘোষণা করতে, android:grantUriPermissions
অ্যাট্রিবিউট বা <grant-uri-permission>
উপাদান ব্যবহার করুন।
আপনি প্রতি-ইউআরআই ভিত্তিতে অনুমতিও দিতে পারেন। একটি কার্যকলাপ শুরু করার সময় বা একটি কার্যকলাপের ফলাফল ফেরত দেওয়ার সময়, Intent.FLAG_GRANT_READ_URI_PERMISSION
অভিপ্রায় পতাকা, Intent.FLAG_GRANT_WRITE_URI_PERMISSION
অভিপ্রায় পতাকা বা উভয় পতাকা সেট করুন৷ এটি অন্যান্য অ্যাপগুলিকে যথাক্রমে, উদ্দেশ্যের অন্তর্ভুক্ত ডেটা URI-এর জন্য পড়ার, লিখতে বা পড়ার/লেখার অনুমতি দেয়৷ অন্যান্য অ্যাপ্লিকেশানগুলি নির্দিষ্ট URI-এর জন্য এই অনুমতিগুলি অর্জন করে তা নির্বিশেষে তাদের আরও সাধারণভাবে সামগ্রী প্রদানকারীর ডেটা অ্যাক্সেস করার অনুমতি রয়েছে।
উদাহরণ স্বরূপ, ধরুন একজন ব্যবহারকারী আপনার অ্যাপ ব্যবহার করে একটি ইমেজ সংযুক্তি সহ একটি ইমেল দেখতে পাচ্ছেন। অন্যান্য অ্যাপ্লিকেশানগুলি সাধারণভাবে ইমেল সামগ্রীগুলি অ্যাক্সেস করতে সক্ষম হবে না, তবে তারা চিত্রটি দেখতে আগ্রহী হতে পারে৷ আপনার অ্যাপ্লিকেশানটি একটি ইন্টেন্ট এবং Intent.FLAG_GRANT_READ_URI_PERMISSION
ইন্টেন্ট ফ্ল্যাগ ব্যবহার করতে পারে একটি ছবি দেখার অ্যাপকে ছবিটি দেখতে দিতে৷
আরেকটি বিবেচনা হল অ্যাপ দৃশ্যমানতা । যদি আপনার অ্যাপটি Android 11 (API লেভেল 30) বা উচ্চতরকে টার্গেট করে, তাহলে সিস্টেমটি কিছু অ্যাপকে আপনার অ্যাপে স্বয়ংক্রিয়ভাবে দৃশ্যমান করে এবং ডিফল্টরূপে অন্যান্য অ্যাপ লুকিয়ে রাখে। যদি আপনার অ্যাপের একটি বিষয়বস্তু প্রদানকারী থাকে এবং অন্য অ্যাপকে URI অনুমতি দিয়ে থাকে, তাহলে আপনার অ্যাপটি সেই অন্য অ্যাপের কাছে স্বয়ংক্রিয়ভাবে দৃশ্যমান হবে।
আরও তথ্যের জন্য, grantUriPermission()
, revokeUriPermission()
, এবং checkUriPermission()
পদ্ধতির রেফারেন্স উপাদান দেখুন।
আপনার অ্যাপের ব্রডকাস্ট রিসিভারের সাথে মিথস্ক্রিয়া সীমাবদ্ধ করুন
অন্য কোন অ্যাপ সংশ্লিষ্ট BroadcastReceiver
এ সম্প্রচার পাঠাতে পারে তা সীমাবদ্ধ করতে <receiver>
ট্যাগে android:permission
বৈশিষ্ট্য ব্যবহার করুন। Context.sendBroadcast()
রিটার্ন করার পরে অনুমতি চেক করা হয়, কারণ সিস্টেম প্রদত্ত রিসিভারের কাছে জমা দেওয়া সম্প্রচার সরবরাহ করার চেষ্টা করে। এর মানে হল যে একটি অনুমতি ব্যর্থতার ফলে একটি ব্যতিক্রম কলারের কাছে ফিরিয়ে দেওয়া হয় না-এটি শুধুমাত্র Intent
প্রদান করে না৷
একইভাবে, আপনি একটি প্রোগ্রাম্যাটিকভাবে নিবন্ধিত রিসিভারে অন্য কোন অ্যাপগুলি সম্প্রচার করতে পারে তা নিয়ন্ত্রণ করতে Context.registerReceiver()
কে একটি অনুমতি সরবরাহ করতে পারেন৷ অন্য পথে গিয়ে, কোন ব্রডকাস্ট রিসিভার সম্প্রচার গ্রহণ করতে পারে তা সীমাবদ্ধ করতে আপনি Context.sendBroadcast()
এ কল করার সময় একটি অনুমতি সরবরাহ করতে পারেন।
নোট করুন যে একজন রিসিভার এবং একজন সম্প্রচারকারী উভয়েরই অনুমতির প্রয়োজন হতে পারে। এটি ঘটলে, সংশ্লিষ্ট লক্ষ্যে বিতরণ করার অভিপ্রায়ের জন্য উভয় অনুমতি পরীক্ষা অবশ্যই পাস করতে হবে। আরও তথ্যের জন্য, অনুমতি সহ সম্প্রচার সীমাবদ্ধ করা দেখুন।