যখন android:autoVerify="true"
আপনার অ্যাপের অভিপ্রায় ফিল্টারগুলির মধ্যে অন্তত একটিতে উপস্থিত থাকে, তখন Android 6.0 (API লেভেল 23) বা উচ্চতর চালায় এমন একটি ডিভাইসে আপনার অ্যাপ ইনস্টল করার ফলে সিস্টেমটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপের অভিপ্রায় ফিল্টারগুলির URLগুলির সাথে যুক্ত হোস্টগুলিকে যাচাই করে। অ্যান্ড্রয়েড 12 এবং উচ্চতর সংস্করণে, আপনি যাচাইকরণের যুক্তি পরীক্ষা করার জন্য ম্যানুয়ালি যাচাইকরণ প্রক্রিয়া শুরু করতে পারেন।
স্বয়ংক্রিয় যাচাইকরণ
সিস্টেমের স্বয়ংক্রিয় যাচাইকরণে নিম্নলিখিতগুলি জড়িত:
- সিস্টেমটি সমস্ত অভিপ্রায় ফিল্টারগুলি পরিদর্শন করে যা নিম্নলিখিতগুলির মধ্যে যেকোনটি অন্তর্ভুক্ত করে:
- অ্যাকশন:
android.intent.action.VIEW
- বিভাগগুলি:
android.intent.category.BROWSABLE
এবংandroid.intent.category.DEFAULT
- ডেটা স্কিম:
http
বাhttps
- অ্যাকশন:
- উপরের অভিপ্রায় ফিল্টারগুলিতে পাওয়া প্রতিটি অনন্য হোস্ট নামের জন্য, Android
https:///.well-known/assetlinks.json
এ ডিজিটাল সম্পদ লিঙ্ক ফাইলের জন্য সংশ্লিষ্ট ওয়েবসাইটগুলিকে জিজ্ঞাসা করে।
আপনি আপনার অ্যাপের সাথে সংযুক্ত করার জন্য ওয়েবসাইটগুলির তালিকা নিশ্চিত করার পরে এবং হোস্ট করা JSON ফাইলটি বৈধ তা নিশ্চিত করার পরে, আপনার ডিভাইসে অ্যাপটি ইনস্টল করুন। অ্যাসিঙ্ক্রোনাস যাচাইকরণ প্রক্রিয়া সম্পূর্ণ হওয়ার জন্য কমপক্ষে 20 সেকেন্ড অপেক্ষা করুন। সিস্টেম আপনার অ্যাপ যাচাই করেছে কিনা তা পরীক্ষা করতে এবং সঠিক লিঙ্ক পরিচালনার নীতি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
adb shell am start -a android.intent.action.VIEW \ -c android.intent.category.BROWSABLE \ -d "http://domain.name:optional_port"
ম্যানুয়াল যাচাইকরণ
Android 12 থেকে শুরু করে, আপনি একটি ডিভাইসে ইনস্টল করা অ্যাপের জন্য ম্যানুয়ালি ডোমেন যাচাইকরণ করতে পারেন। আপনার অ্যাপটি Android 12 কে লক্ষ্য করে কিনা তা নির্বিশেষে আপনি এই প্রক্রিয়াটি সম্পাদন করতে পারেন।
একটি ইন্টারনেট সংযোগ স্থাপন করুন
ডোমেন যাচাইকরণের জন্য, আপনার পরীক্ষার ডিভাইস অবশ্যই ইন্টারনেটের সাথে সংযুক্ত থাকতে হবে।
আপডেট করা ডোমেন যাচাইকরণ প্রক্রিয়া সমর্থন করুন
যদি আপনার অ্যাপটি Android 12 বা তার উচ্চতরকে লক্ষ্য করে, তাহলে সিস্টেমটি স্বয়ংক্রিয়ভাবে আপডেট হওয়া ডোমেন যাচাইকরণ প্রক্রিয়া ব্যবহার করে।
অন্যথায়, আপনি ম্যানুয়ালি আপডেট করা যাচাইকরণ প্রক্রিয়া সক্ষম করতে পারেন। এটি করতে, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:
adb shell am compat enable 175408749 PACKAGE_NAME
একটি ডিভাইসে Android অ্যাপ লিঙ্কের অবস্থা রিসেট করুন
আপনি একটি ডিভাইসে ম্যানুয়ালি ডোমেন যাচাইকরণ শুরু করার আগে, আপনাকে অবশ্যই পরীক্ষা ডিভাইসে Android অ্যাপ লিঙ্কগুলির অবস্থা রিসেট করতে হবে। এটি করতে, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:
adb shell pm set-app-links --package PACKAGE_NAME 0 all
ব্যবহারকারী যেকোনো ডোমেনের জন্য ডিফল্ট অ্যাপ বেছে নেওয়ার আগে এই কমান্ডটি ডিভাইসটিকে একই অবস্থায় রাখে।
ডোমেন যাচাইকরণ প্রক্রিয়া শুরু করুন
আপনি একটি ডিভাইসে Android অ্যাপ লিঙ্কের অবস্থা রিসেট করার পরে, আপনি নিজেই যাচাইকরণ করতে পারেন। এটি করতে, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:
adb shell pm verify-app-links --re-verify PACKAGE_NAME
যাচাইকরণ ফলাফল পর্যালোচনা করুন
যাচাইকরণ এজেন্টকে তার অনুরোধগুলি শেষ করার জন্য কিছু সময় দেওয়ার পরে, যাচাইকরণের ফলাফলগুলি পর্যালোচনা করুন৷ এটি করতে, নিম্নলিখিত কমান্ডটি চালান:
adb shell pm get-app-links PACKAGE_NAME
এই কমান্ডের আউটপুট নিম্নলিখিত অনুরূপ:
com.example.pkg: ID: 01234567-89ab-cdef-0123-456789abcdef Signatures: [***] Domain verification state: example.com: verified sub.example.com: legacy_failure example.net: verified example.org: 1026
যে ডোমেনগুলি সফলভাবে যাচাইকরণ পাস করে তাদের একটি ডোমেন যাচাইকরণের অবস্থা verified
। অন্য কোনো রাজ্য নির্দেশ করে যে ডোমেন যাচাইকরণ করা যাবে না। বিশেষ করে, none
অবস্থাই ইঙ্গিত করে না যে যাচাইকরণ এজেন্ট এখনও যাচাইকরণ প্রক্রিয়াটি সম্পন্ন করেনি।
নিম্নলিখিত তালিকাটি সম্ভাব্য রিটার্ন মানগুলি দেখায় যা ডোমেন যাচাইকরণ একটি প্রদত্ত ডোমেনের জন্য ফেরত দিতে পারে:
-
none
- এই ডোমেনের জন্য কিছুই রেকর্ড করা হয়নি। যাচাইকরণ এজেন্ট ডোমেন যাচাইকরণ সম্পর্কিত অনুরোধগুলি শেষ করার জন্য আরও কয়েক মিনিট অপেক্ষা করুন, তারপরে আবার ডোমেন যাচাইকরণ প্রক্রিয়া শুরু করুন ।
-
verified
- ঘোষণাকারী অ্যাপের জন্য ডোমেনটি সফলভাবে যাচাই করা হয়েছে।
-
approved
- ডোমেনটি জোর করে-অনুমোদিত করা হয়েছিল, সাধারণত একটি শেল কমান্ড চালানোর মাধ্যমে।
-
denied
- ডোমেনটি জোরপূর্বক অস্বীকার করা হয়েছিল, সাধারণত একটি শেল কমান্ড কার্যকর করার মাধ্যমে।
-
migrated
- সিস্টেমটি একটি পূর্ববর্তী প্রক্রিয়ার ফলাফল সংরক্ষণ করে যা লিগ্যাসি ডোমেন যাচাইকরণ ব্যবহার করে।
-
restored
- ব্যবহারকারী ডেটা পুনরুদ্ধার করার পরে ডোমেনটি অনুমোদিত হয়েছিল। ধারণা করা হয় যে ডোমেইনটি আগে যাচাই করা হয়েছে।
-
legacy_failure
- একটি উত্তরাধিকার যাচাইকারী দ্বারা ডোমেনটি প্রত্যাখ্যান করা হয়েছে৷ ব্যর্থতার নির্দিষ্ট কারণ অজানা।
-
system_configured
- ডোমেনটি ডিভাইস কনফিগারেশন দ্বারা স্বয়ংক্রিয়ভাবে অনুমোদিত হয়েছিল।
- ত্রুটি কোড
1024
বা তার বেশি কাস্টম ত্রুটি কোড যা ডিভাইসের যাচাইকারীর জন্য নির্দিষ্ট।
আপনি একটি নেটওয়ার্ক সংযোগ স্থাপন করেছেন তা দুবার-চেক করুন এবং ডোমেন যাচাইকরণ প্রক্রিয়া আবার শুরু করুন ৷
আপনার অ্যাপটিকে একটি ডোমেনের সাথে যুক্ত করার জন্য ব্যবহারকারীকে অনুরোধ করুন৷
একটি ডোমেনের জন্য আপনার অ্যাপের অনুমোদন পাওয়ার আরেকটি উপায় হল ব্যবহারকারীকে সেই ডোমেনের সাথে আপনার অ্যাপ যুক্ত করতে বলা।
আপনার অ্যাপটি ইতিমধ্যেই ডোমেনের জন্য অনুমোদিত কিনা তা পরীক্ষা করুন৷
আপনি ব্যবহারকারীকে অনুরোধ করার আগে, আপনার অ্যাপটি আপনার <intent-filter>
> উপাদানগুলিতে সংজ্ঞায়িত ডোমেনের জন্য ডিফল্ট হ্যান্ডলার কিনা তা পরীক্ষা করে দেখুন। আপনি নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করে অনুমোদনের অবস্থা জিজ্ঞাসা করতে পারেন:
-
DomainVerificationManager
API (রানটাইমে) - একটি কমান্ড-লাইন প্রোগ্রাম (পরীক্ষার সময়)।
ডোমেন ভেরিফিকেশন ম্যানেজার
নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে DomainVerificationManager
API ব্যবহার করতে হয়:
কোটলিন
val context: Context = TODO("Your activity or fragment's Context") val manager = context.getSystemService(DomainVerificationManager::class.java) val userState = manager.getDomainVerificationUserState(context.packageName) // Domains that have passed Android App Links verification. val verifiedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED } // Domains that haven't passed Android App Links verification but that the user // has associated with an app. val selectedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_SELECTED } // All other domains. val unapprovedDomains = userState?.hostToStateMap ?.filterValues { it == DomainVerificationUserState.DOMAIN_STATE_NONE }
জাভা
Context context = TODO("Your activity or fragment's Context"); DomainVerificationManager manager = context.getSystemService(DomainVerificationManager.class); DomainVerificationUserState userState = manager.getDomainVerificationUserState(context.getPackageName()); Map<String, Integer> hostToStateMap = userState.getHostToStateMap(); List<String> verifiedDomains = new ArrayList<>(); List<String> selectedDomains = new ArrayList<>(); List<String> unapprovedDomains = new ArrayList<>(); for (String key : hostToStateMap.keySet()) { Integer stateValue = hostToStateMap.get(key); if (stateValue == DomainVerificationUserState.DOMAIN_STATE_VERIFIED) { // Domain has passed Android App Links verification. verifiedDomains.add(key); } else if (stateValue == DomainVerificationUserState.DOMAIN_STATE_SELECTED) { // Domain hasn't passed Android App Links verification, but the user has // associated it with an app. selectedDomains.add(key); } else { // All other domains. unapprovedDomains.add(key); } }
কমান্ড লাইন প্রোগ্রাম
বিকাশের সময় আপনার অ্যাপটি পরীক্ষা করার সময়, আপনার সংস্থার মালিকানাধীন ডোমেনগুলির যাচাইকরণের অবস্থা জানতে আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:
adb shell pm get-app-links --user cur PACKAGE_NAME
নিম্নলিখিত উদাহরণের আউটপুটে, যদিও অ্যাপটি "example.org" ডোমেনের জন্য যাচাইকরণে ব্যর্থ হয়েছে, ব্যবহারকারী 0 সিস্টেম সেটিংসে অ্যাপটিকে ম্যানুয়ালি অনুমোদন করেছে এবং সেই ডোমেনের জন্য অন্য কোনো প্যাকেজ যাচাই করা হয়নি।
com.example.pkg: ID: *** Signatures: [***] Domain verification state: example.com: verified example.net: verified example.org: 1026 User 0: Verification link handling allowed: true Selection state: Enabled: example.org Disabled: example.com example.net
আপনি প্রক্রিয়াটি অনুকরণ করতে শেল কমান্ডগুলিও ব্যবহার করতে পারেন যেখানে ব্যবহারকারী একটি প্রদত্ত ডোমেনের সাথে কোন অ্যাপটি যুক্ত তা নির্বাচন করে। এই কমান্ডগুলির একটি সম্পূর্ণ ব্যাখ্যা adb shell pm
এর আউটপুট থেকে পাওয়া যায়।
অনুরোধের জন্য প্রসঙ্গ প্রদান করুন
আপনি ডোমেন অনুমোদনের জন্য এই অনুরোধ করার আগে, ব্যবহারকারীর জন্য কিছু প্রসঙ্গ প্রদান করুন। উদাহরণস্বরূপ, আপনি তাদের একটি স্প্ল্যাশ স্ক্রিন, একটি ডায়ালগ বা অনুরূপ UI উপাদান দেখাতে পারেন যা ব্যবহারকারীকে ব্যাখ্যা করে যে কেন আপনার অ্যাপটি একটি নির্দিষ্ট ডোমেনের জন্য ডিফল্ট হ্যান্ডলার হওয়া উচিত।
অনুরোধ করুন
ব্যবহারকারী বুঝতে পেরেছেন যে আপনার অ্যাপ তাদের কী করতে বলছে, অনুরোধ করুন। এটি করার জন্য, ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
ইন্টেন্ট অ্যাকশন এবং একটি ডেটা স্ট্রিং ম্যাচিং package: com.example.pkg
, নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
কোটলিন
val context: Context = TODO("Your activity or fragment's Context") val intent = Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:${context.packageName}")) context.startActivity(intent)
জাভা
Context context = TODO("Your activity or fragment's Context"); Intent intent = new Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, Uri.parse("package:" + context.getPackageName())); context.startActivity(intent);
যখন অভিপ্রায় আহ্বান করা হয়, ব্যবহারকারীরা একটি সেটিংস স্ক্রীন দেখতে পায় যাকে বলা হয় ডিফল্টরূপে ওপেন ৷ এই স্ক্রিনে একটি রেডিও বোতাম রয়েছে যার নাম ওপেন সমর্থিত লিঙ্কগুলি , যেমন চিত্র 1 এ দেখানো হয়েছে।
ব্যবহারকারী যখন সমর্থিত লিঙ্কগুলি খুলুন চালু করেন, তখন এই অ্যাপে খোলার জন্য লিঙ্ক নামক একটি বিভাগের অধীনে চেকবক্সের একটি সেট প্রদর্শিত হয়। এখান থেকে, ব্যবহারকারীরা আপনার অ্যাপের সাথে যুক্ত করতে চান এমন ডোমেনগুলি নির্বাচন করতে পারেন৷ তারা ডোমেন যোগ করার জন্য লিঙ্ক যোগ করুন নির্বাচন করতে পারে, যেমন চিত্র 2-এ দেখানো হয়েছে। ব্যবহারকারীরা পরে তাদের যোগ করা ডোমেনের মধ্যে কোনো লিঙ্ক নির্বাচন করলে, লিঙ্কটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপে খোলে।
আপনার অ্যাপে এমন ডোমেন খুলুন যা আপনার অ্যাপ যাচাই করতে পারে না
আপনার অ্যাপের প্রধান কাজটি হ্যান্ডেল করা ডোমেনগুলি যাচাই করার ক্ষমতা ছাড়াই তৃতীয় পক্ষ হিসাবে লিঙ্কগুলি খুলতে পারে। যদি এটি হয়, ব্যবহারকারীদের ব্যাখ্যা করুন যে, যখন তারা একটি ওয়েব লিঙ্ক নির্বাচন করেন, তখন তারা একটি প্রথম পক্ষের অ্যাপ এবং আপনার (তৃতীয়-পক্ষ) অ্যাপের মধ্যে বেছে নিতে পারবেন না। ব্যবহারকারীদের ম্যানুয়ালি ডোমেনগুলিকে আপনার তৃতীয় পক্ষের অ্যাপের সাথে সংযুক্ত করতে হবে।
এছাড়াও, একটি ডায়ালগ বা ট্রামপোলিন অ্যাক্টিভিটি প্রবর্তন করার কথা বিবেচনা করুন যা ব্যবহারকারীকে প্রথম পক্ষের অ্যাপে লিঙ্কটি খুলতে দেয় যদি ব্যবহারকারী এটি করতে পছন্দ করে, একটি প্রক্সি হিসাবে কাজ করে৷ এই ধরনের একটি ডায়ালগ বা ট্রামপোলিন অ্যাক্টিভিটি সেট আপ করার আগে, আপনার অ্যাপটি সেট আপ করুন যাতে এটি আপনার অ্যাপের ওয়েব অভিপ্রায় ফিল্টারের সাথে মেলে এমন প্রথম পক্ষের অ্যাপগুলিতে প্যাকেজ দৃশ্যমানতা পায়।