অ্যাপ লিংক যাচাই করুন

যখন আপনার অ্যাপের ইন্টেন্ট ফিল্টারগুলির মধ্যে অন্তত একটিতে android:autoVerify="true" উপস্থিত থাকে, তখন Android 6.0 (API লেভেল 23) বা তার উচ্চতর সংস্করণে চালিত কোনো ডিভাইসে আপনার অ্যাপটি ইনস্টল করলে, সিস্টেমটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপের ইন্টেন্ট ফিল্টারগুলিতে থাকা URL-গুলির সাথে যুক্ত হোস্টগুলিকে যাচাই করে। Android 12 এবং তার উচ্চতর সংস্করণে, আপনি যাচাইকরণের লজিকটি পরীক্ষা করার জন্য ম্যানুয়ালিও যাচাইকরণ প্রক্রিয়াটি চালু করতে পারেন।

স্বয়ংক্রিয় যাচাইকরণ

সিস্টেমের স্বয়ংক্রিয় যাচাইকরণ প্রক্রিয়ায় নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত রয়েছে:

  1. সিস্টেমটি সেই সমস্ত ইনটেন্ট ফিল্টার পরীক্ষা করে, যেগুলিতে নিম্নলিখিতগুলির মধ্যে কোনো একটি অন্তর্ভুক্ত থাকে:
    • অ্যাকশন: android.intent.action.VIEW
    • বিভাগসমূহ: android.intent.category.BROWSABLE এবং android.intent.category.DEFAULT
    • ডেটা স্কিম: http অথবা https
  2. উপরোক্ত ইন্টেন্ট ফিল্টারগুলিতে পাওয়া প্রতিটি অনন্য হোস্ট নামের জন্য, অ্যান্ড্রয়েড https:///.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"

ম্যানুয়াল যাচাইকরণ

অ্যান্ড্রয়েড ১২ থেকে, আপনি ডিভাইসে ইনস্টল করা কোনো অ্যাপের জন্য ম্যানুয়ালি ডোমেইন ভেরিফিকেশন চালু করতে পারবেন। আপনার অ্যাপটি অ্যান্ড্রয়েড ১২-কে টার্গেট করুক বা না করুক, আপনি এই প্রক্রিয়াটি সম্পাদন করতে পারবেন।

ইন্টারনেট সংযোগ স্থাপন করুন

ডোমেইন যাচাইকরণ সম্পন্ন করার জন্য আপনার পরীক্ষামূলক ডিভাইসটি অবশ্যই ইন্টারনেটের সাথে সংযুক্ত থাকতে হবে।

আপডেট করা ডোমেইন যাচাইকরণ প্রক্রিয়াকে সমর্থন করুন।

আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১২ বা তার উচ্চতর সংস্করণকে টার্গেট করে, তাহলে সিস্টেম স্বয়ংক্রিয়ভাবে হালনাগাদ করা ডোমেইন যাচাইকরণ প্রক্রিয়াটি ব্যবহার করে।

অন্যথায়, আপনি ম্যানুয়ালি আপডেট করা যাচাইকরণ প্রক্রিয়াটি সক্রিয় করতে পারেন। এটি করার জন্য, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:

adb shell am compat enable 175408749 PACKAGE_NAME

ডিভাইসে অ্যান্ড্রয়েড অ্যাপ লিঙ্কগুলির অবস্থা রিসেট করুন

কোনো ডিভাইসে ম্যানুয়ালি ডোমেইন ভেরিফিকেশন চালু করার আগে, আপনাকে অবশ্যই টেস্ট ডিভাইসটিতে অ্যান্ড্রয়েড অ্যাপ লিঙ্কের অবস্থা রিসেট করতে হবে। এটি করার জন্য, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:

adb shell pm set-app-links --package PACKAGE_NAME 0 all

এই কমান্ডটি ডিভাইসটিকে সেই অবস্থায় ফিরিয়ে দেয়, যে অবস্থায় ব্যবহারকারী কোনো ডোমেইনের জন্য ডিফল্ট অ্যাপ বেছে নেওয়ার আগে ডিভাইসটি থাকে।

ডোমেইন যাচাইকরণ প্রক্রিয়াটি চালু করুন

ডিভাইসে অ্যান্ড্রয়েড অ্যাপ লিঙ্কের অবস্থা রিসেট করার পর, আপনি যাচাইকরণটি করতে পারবেন। এটি করার জন্য, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডটি চালান:

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" ডোমেনের জন্য যাচাইকরণে ব্যর্থ হয়েছে, ব্যবহারকারী ০ সিস্টেম সেটিংসে অ্যাপটিকে ম্যানুয়ালি অনুমোদন করেছেন এবং সেই ডোমেনের জন্য অন্য কোনো প্যাকেজ যাচাই করা হয়নি।

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);

যখন ইন্টেন্টটি চালু করা হয়, ব্যবহারকারীরা ডিফল্টরূপে 'ওপেন' নামের একটি সেটিংস স্ক্রিন দেখতে পান। এই স্ক্রিনটিতে 'ওপেন সাপোর্টেড লিঙ্কস' নামের একটি রেডিও বাটন থাকে, যেমনটি চিত্র ১-এ দেখানো হয়েছে।

যখন ব্যবহারকারী ‘ওপেন সাপোর্টেড লিঙ্কস’ চালু করেন, তখন ‘লিঙ্কস টু ওপেন ইন দিস অ্যাপ’ নামক একটি বিভাগের অধীনে কয়েকটি চেকবক্স দেখা যায়। এখান থেকে, ব্যবহারকারীরা আপনার অ্যাপের সাথে যুক্ত করতে চান এমন ডোমেইনগুলো নির্বাচন করতে পারেন। চিত্র ২-এ দেখানো অনুযায়ী, তারা ডোমেইন যোগ করার জন্য ‘অ্যাড লিঙ্ক’ বিকল্পটিও নির্বাচন করতে পারেন। ব্যবহারকারীরা পরবর্তীতে তাদের যোগ করা ডোমেইনগুলোর মধ্যে থেকে কোনো লিঙ্ক নির্বাচন করলে, লিঙ্কটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপে খুলে যায়।

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

আপনার অ্যাপে এমন ডোমেইন খুলুন যা আপনার অ্যাপ যাচাই করতে পারে না।

আপনার অ্যাপের প্রধান কাজ হতে পারে তৃতীয় পক্ষ হিসেবে লিঙ্ক খোলা, যেখানে এর পরিচালিত ডোমেইনগুলো যাচাই করার কোনো ক্ষমতা থাকে না। যদি বিষয়টি এমন হয়, তবে ব্যবহারকারীদের বুঝিয়ে বলুন যে, যখন তারা কোনো ওয়েব লিঙ্ক নির্বাচন করেন, তখন তারা কোনো ফার্স্ট-পার্টি অ্যাপ এবং আপনার (তৃতীয় পক্ষের) অ্যাপের মধ্যে থেকে বেছে নিতে পারেন না। ব্যবহারকারীদের ম্যানুয়ালি ডোমেইনগুলোকে আপনার তৃতীয় পক্ষের অ্যাপের সাথে যুক্ত করতে হবে।

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

ডিজিটাল অ্যাসেট লিঙ্কস আপডেটের বিলম্ব

যখন আপনি আপনার ওয়েব সার্ভারে assetlinks.json ফাইলটি আপডেট করেন, তখন এই পরিবর্তনগুলি ব্যবহারকারীর ডিভাইসে প্রতিফলিত হতে যে সময় লাগে তা OS সংস্করণের উপর নির্ভর করে:

  • অ্যান্ড্রয়েড ১৫ (এপিআই লেভেল ৩৫) এবং উচ্চতর সংস্করণ: সিস্টেমটি পর্যায়ক্রমে ব্যাকগ্রাউন্ডে ডোমেইনগুলো পুনরায় যাচাই করে। সিস্টেমের ক্যাশিং এবং নির্ধারিত পুনঃ-যাচাইয়ের কারণে, পরিবর্তনগুলো সকল ব্যবহারকারীর ডিভাইসে পৌঁছাতে সাত দিন পর্যন্ত সময় লাগতে পারে।
  • অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) এবং তার নিচের সংস্করণ: সিস্টেম পর্যায়ক্রমিক ব্যাকগ্রাউন্ড পুনঃ-যাচাইকরণ করে না। ফাইলটির আপডেট সাধারণত তখনই গৃহীত হয় যখন অ্যাপটি ইনস্টল বা আপডেট করা হয়।

পরীক্ষার আপডেট

পরীক্ষার সময় কোনো নির্দিষ্ট ডিভাইসে পুনরায় যাচাইকরণ বাধ্যতামূলক করতে, আপনি অ্যাপটি আনইনস্টল এবং রিইনস্টল করতে পারেন। তবে, মনে রাখবেন যে রিইনস্টল করার পরেও সার্ভার-সাইড ক্যাশের কারণে ডিভাইসে আপডেট হওয়া assetlinks.json ফাইলটি পৌঁছাতে দেরি হতে পারে। যেহেতু ক্যাশটি সময়-ভিত্তিক, তাই কয়েক ঘণ্টা পর আবার চেষ্টা করলে এই বিলম্ব সাধারণত স্বয়ংক্রিয়ভাবে ঠিক হয়ে যায়।