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

যখন 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 ফাইলটি বৈধ কিনা তা নিশ্চিত করার পরে, আপনার ডিভাইসে অ্যাপটি ইনস্টল করুন। অ্যাসিঙ্ক্রোনাস যাচাইকরণ প্রক্রিয়াটি সম্পূর্ণ হওয়ার জন্য কমপক্ষে 20 সেকেন্ড অপেক্ষা করুন। সিস্টেমটি আপনার অ্যাপটি যাচাই করেছে কিনা তা পরীক্ষা করতে এবং সঠিক লিঙ্ক হ্যান্ডলিং নীতিগুলি সেট করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

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" ডোমেনের জন্য যাচাইকরণে ব্যর্থ হয়েছে, ব্যবহারকারী 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);

যখন ইনটেন্টটি চালু করা হয়, তখন ব্যবহারকারীরা ডিফল্টভাবে "Open" নামে একটি সেটিংস স্ক্রিন দেখতে পান। এই স্ক্রিনে "Open supported links" নামে একটি রেডিও বোতাম রয়েছে, যেমনটি চিত্র ১-এ দেখানো হয়েছে।

যখন ব্যবহারকারী "Open supported links" চালু করেন, তখন "Links to open in this app" নামের একটি বিভাগের অধীনে চেকবক্সের একটি সেট প্রদর্শিত হয়। এখান থেকে, ব্যবহারকারীরা আপনার অ্যাপের সাথে সংযুক্ত করতে চান এমন ডোমেন নির্বাচন করতে পারেন। চিত্র ২-এ দেখানো হয়েছে, তারা ডোমেন যোগ করার জন্য "Add link" নির্বাচন করতে পারেন। ব্যবহারকারীরা পরে যখন তাদের যোগ করা ডোমেনের মধ্যে যেকোনো লিঙ্ক নির্বাচন করেন, তখন লিঙ্কটি স্বয়ংক্রিয়ভাবে আপনার অ্যাপে খোলে।

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

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

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

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