আপনার অ্যাপের অন্তত একটি ইনটেন্ট ফিল্টারে android:autoVerify="true" থাকলে, Android 6.0 (API লেভেল 23) বা তার পরবর্তী ভার্সন
চালানো ডিভাইসে আপনার অ্যাপ ইনস্টল করলে, সিস্টেম অটোমেটিক আপনার অ্যাপের ইনটেন্ট ফিল্টারে থাকা URL-এর সাথে
সম্পর্কিত হোস্ট যাচাই করে। Android 12 ও তার পরবর্তী ভার্সনে, যাচাইকরণের লজিক পরীক্ষা করতে আপনি ম্যানুয়ালি যাচাইকরণ প্রক্রিয়া চালু করতে পারবেন।
অটোমেটিক যাচাইকরণ
সিস্টেমের অটোমেটিক যাচাইকরণে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত থাকে:
- সিস্টেম এমন সব ইনটেন্ট ফিল্টার পরীক্ষা করে দেখে যেগুলির মধ্যে নিম্নলিখিত যেকোনও একটি অন্তর্ভুক্ত থাকে:
- অ্যাকশন:
android.intent.action.VIEW - বিভাগ:
android.intent.category.BROWSABLEএবংandroid.intent.category.DEFAULT - ডেটা স্কিম:
httpবাhttps
- অ্যাকশন:
- ইনটেন্ট ফিল্টারে পাওয়া প্রতিটি অনন্য হোস্টনেমের জন্য, Android https://hostname/.well-known/assetlinks.json-এ ডিজিটাল অ্যাসেট লিঙ্ক ফাইলের জন্য সংশ্লিষ্ট ওয়েবসাইট কোয়েরি করে।
আপনার অ্যাপের সাথে যুক্ত করার জন্য ওয়েবসাইটের তালিকা কনফার্ম করার পরে এবং হোস্ট করা JSON ফাইলটি সঠিক কিনা তা কনফার্ম করার পরে, আপনার ডিভাইসে অ্যাপটি ইনস্টল করুন। অ্যাসিঙ্ক্রোনাস যাচাইকরণ প্রসেস সম্পূর্ণ হতে কমপক্ষে ২০ সেকেন্ড অপেক্ষা করুন। সিস্টেম আপনার অ্যাপ যাচাই করেছে কিনা এবং সঠিক লিঙ্ক ম্যানেজমেন্ট নীতি সেট করেছে কিনা তা চেক করতে নিম্নলিখিত কমান্ড ব্যবহার করুন:
adb shell am start -a android.intent.action.VIEW \
-c android.intent.category.BROWSABLE \
-d "http://domain.name:optional_port"
ম্যানুয়াল যাচাইকরণ
Android 12 থেকে শুরু করে, ডিভাইসে ইনস্টল করা কোনও অ্যাপের জন্য আপনি ম্যানুয়ালি ডোমেন যাচাইকরণ প্রক্রিয়া শুরু করতে পারবেন। আপনার অ্যাপ Android ১২-কে টার্গেট করুক বা না করুক, আপনি এই প্রসেসটি করতে পারবেন।
ইন্টারনেট কানেকশন চালু করুন
ডোমেন যাচাইকরণ করতে, আপনার টেস্ট ডিভাইস অবশ্যই ইন্টারনেটের সাথে কানেক্ট করা থাকতে হবে।
আপডেট করা ডোমেন যাচাইকরণ প্রসেসকে সাপোর্ট করে
আপনার অ্যাপ Android ১২ বা তার পরবর্তী ভার্সনকে টার্গেট করলে, সিস্টেম অটোমেটিক আপডেট করা ডোমেন যাচাইকরণ প্রসেস ব্যবহার করে।
অন্যথায়, আপনি ম্যানুয়ালি আপডেট করা যাচাইকরণ পদ্ধতি চালু করতে পারবেন। এটি করতে, টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ড রান করুন:
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> এলিমেন্টে সংজ্ঞায়িত ডোমেনের জন্য ডিফল্ট হ্যান্ডলার কিনা তা চেক করুন। আপনি নিম্নলিখিত পদ্ধতির মধ্যে একটি ব্যবহার করে
অনুমোদনের স্ট্যাটাস কোয়েরি করতে পারেন:
DomainVerificationManagerAPI (রানটাইমে)।- একটি কমান্ড-লাইন প্রোগ্রাম (পরীক্ষা চলাকালীন)।
DomainVerificationManager
নিচে দেওয়া কোড স্নিপেট থেকে বোঝা যাবে যে কীভাবে
DomainVerificationManager API ব্যবহার করতে হয়:
Kotlin
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-এর সাথে ম্যাচ করে এমন ডেটা স্ট্রিং থাকে, যেমনটি
নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
Kotlin
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);
ইনটেন্ট চালু করা হলে, ব্যবহারকারীরা ডিফল্ট হিসেবে খুলুন নামে একটি সেটিংস স্ক্রিন দেখতে পান। এই স্ক্রিনে যেসব লিঙ্ক কাজ করে সেগুলি খুলুন নামে একটি রেডিও বোতাম আছে, যেমনটি ছবি ১-এ দেখানো হয়েছে।
ব্যবহারকারী কাজ করে এমন লিঙ্ক খুলুন বিকল্প চালু করলে, এই অ্যাপে খোলার জন্য লিঙ্ক নামের বিভাগের অধীনে চেকবক্সের একটি সেট দেখানো হয়। এখান থেকে, ব্যবহারকারী আপনার অ্যাপের সাথে যুক্ত করতে চান এমন ডোমেন বেছে নিতে পারবেন। এছাড়াও, ছবি ২-এ যেমন দেখানো হয়েছে, ডোমেন যোগ করতে তারা লিঙ্ক যোগ করুন বিকল্প বেছে নিতে পারবেন। ব্যবহারকারীরা পরে তাদের যোগ করা ডোমেনের মধ্যে যেকোনও লিঙ্ক বেছে নিলে, লিঙ্কটি আপনার অ্যাপে অটোমেটিক খুলে যায়।
আপনার অ্যাপে এমন ডোমেন খুলুন যা আপনার অ্যাপ যাচাই করতে পারে না
আপনার অ্যাপের প্রধান ফাংশন হতে পারে থার্ড-পার্টি হিসেবে লিঙ্ক খোলা, যেখানে হ্যান্ডেল করা ডোমেন যাচাই করার ক্ষমতা নেই। এমন হলে, ব্যবহারকারীদের ব্যাখ্যা করুন যে, সেই সময় তারা কোনও ওয়েব লিঙ্ক বেছে নিলে, ফার্স্ট-পার্টি অ্যাপ এবং আপনার (থার্ড-পার্টি) অ্যাপের মধ্যে বেছে নিতে পারবেন না। ব্যবহারকারীদের ম্যানুয়ালি আপনার থার্ড-পার্টি অ্যাপের সাথে ডোমেন অ্যাসোসিয়েট করতে হবে।
এছাড়াও, এমন একটি ডায়ালগ বা ট্র্যাম্পোলিন অ্যাক্টিভিটি চালু করার কথা বিবেচনা করুন যা ব্যবহারকারী চাইলে তাকে ফার্স্ট-পার্টি অ্যাপে লিঙ্ক খোলার অনুমতি দেয়, প্রক্সি হিসেবে কাজ করে। এই ধরনের ডায়ালগ বা ট্র্যাম্পোলিন অ্যাক্টিভিটি সেট-আপ করার আগে, আপনার অ্যাপ সেট-আপ করুন যাতে ফার্স্ট-পার্টি অ্যাপে এটির প্যাকেজ দৃশ্যমানতা থাকে যা আপনার অ্যাপের ওয়েব ইনটেন্ট ফিল্টারের সাথে ম্যাচ করে।
ডিজিটাল অ্যাসেট লিঙ্ক আপডেট করার লেটেন্সি
আপনার ওয়েব সার্ভারে assetlinks.json ফাইল আপডেট করলে, ব্যবহারকারীর ডিভাইসে এই পরিবর্তন
দেখাতে যে সময় লাগে তা OS ভার্সনের উপর নির্ভর করে:
- Android 15 (API লেভেল 35) এবং তার পরবর্তী ভার্সন: সিস্টেমটি পর্যায়ক্রমে ব্যাকগ্রাউন্ডে ডোমেন আবার যাচাই করে। সিস্টেমের ক্যাশিং এবং শিডিউল করা পুনরায় যাচাইকরণের কারণে সমস্ত ব্যবহারকারীর ডিভাইসে পরিবর্তনগুলি প্রয়োগ করতে সাত দিন পর্যন্ত সময় লাগতে পারে।
- Android 14 (API লেভেল ৩৪) এবং তার আগের ভার্সন: সিস্টেম নির্দিষ্ট সময় অন্তর ব্যাকগ্রাউন্ডে আবার যাচাই করে না। অ্যাপ ইনস্টল বা আপডেট করা হলে সাধারণত ফাইলের আপডেট নেওয়া হয়।
পরীক্ষা সংক্রান্ত আপডেট
পরীক্ষা করার সময় নির্দিষ্ট ডিভাইসে জোরপূর্বক আবার যাচাই করতে, আপনি
অ্যাপটি আনইনস্টল করে আবার ইনস্টল করতে পারেন। তবে, মনে রাখবেন যে সার্ভার-সাইড ক্যাশে
এখনও ডিভাইসে আপডেট করা assetlinks.json ফাইল ডেলিভারি করতে দেরি করতে পারে,
এমনকি আবার ইনস্টল করার পরেও। ক্যাশে সময়-ভিত্তিক হওয়ার কারণে, কয়েক ঘণ্টা পরে আবার চেষ্টা করলে,
সাধারণত দেরি হওয়ার সমস্যা অটোমেটিক সমাধান হয়ে যায়।