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

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

আপনি আপনার অ্যাপ এবং ওয়েবসাইট ইউআরএল উভয়েরই মালিক তা যাচাই করতে, নিম্নলিখিত পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. autoVerify বৈশিষ্ট্য ধারণ করে এমন অভিপ্রায় ফিল্টার যোগ করুন । এই বৈশিষ্ট্যটি সিস্টেমকে সংকেত দেয় যে আপনার অ্যাপটি আপনার অভিপ্রায় ফিল্টারগুলিতে ব্যবহৃত URL ডোমেনের অন্তর্গত কিনা তা যাচাই করা উচিত।

  2. নিম্নলিখিত অবস্থানে একটি ডিজিটাল সম্পদ লিঙ্ক JSON ফাইল হোস্ট করে আপনার ওয়েবসাইট এবং আপনার উদ্দেশ্য ফিল্টারগুলির মধ্যে সম্পর্ক ঘোষণা করুন :

    https://domain.name/.well-known/assetlinks.json

আপনি নিম্নলিখিত সংস্থানগুলিতে সম্পর্কিত তথ্য পেতে পারেন:

অ্যাপ লিঙ্ক যাচাইকরণের জন্য অভিপ্রায় ফিল্টার যোগ করুন

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

<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <!-- If a user clicks on a shared link that uses the "http" scheme, your
         app should be able to delegate that traffic to "https". -->
    <!-- Do not include other schemes. -->
    <data android:scheme="http" />
    <data android:scheme="https" />

    <!-- Include one or more domains that should be verified. -->
    <data android:host="..." />
</intent-filter>

যদিও প্রতিটি হোস্টের জন্য শুধুমাত্র একটি <intent-filter> ঘোষণায় autoVerify অন্তর্ভুক্ত করা যথেষ্ট, এমনকি সেই হোস্টটি অন্যান্য অচিহ্নিত ঘোষণা জুড়ে ব্যবহার করা হলেও, ধারাবাহিকতার জন্য প্রতিটি <intent-filter> > উপাদানে autoVerify যোগ করার পরামর্শ দেওয়া হয়। এটি এটিও নিশ্চিত করে যে, আপনার ম্যানিফেস্ট ফাইলের উপাদানগুলি সরানোর বা রিফ্যাক্টর করার পরে, আপনার অ্যাপটি এখনও আপনার সংজ্ঞায়িত সমস্ত ডোমেনের সাথে যুক্ত থাকে৷

ডোমেন যাচাইকরণ প্রক্রিয়ার জন্য একটি ইন্টারনেট সংযোগ প্রয়োজন এবং এটি সম্পূর্ণ হতে কিছু সময় লাগতে পারে। প্রক্রিয়াটির কার্যকারিতা উন্নত করতে সাহায্য করার জন্য, সিস্টেমটি এমন একটি অ্যাপের জন্য একটি ডোমেন যাচাই করে যা Android 12 বা উচ্চতরকে লক্ষ্য করে শুধুমাত্র যদি সেই ডোমেনটি একটি <intent-filter> উপাদানের মধ্যে থাকে যা পূর্ববর্তী কোড স্নিপেটে নির্দিষ্ট করা সঠিক বিন্যাস ধারণ করে। উদাহরণস্বরূপ, "http" এবং "https" ব্যতীত অন্যান্য স্কিম যেমন <data android:scheme="custom" /> , একটি <intent-filter> ডোমেন যাচাইকরণকে ট্রিগার করতে বাধা দেবে।

একাধিক হোস্টের জন্য সহায়ক অ্যাপ লিঙ্কিং

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

দ্রষ্টব্য: অ্যান্ড্রয়েড 11 (API স্তর 30) এবং তার নীচে, সিস্টেমটি আপনার অ্যাপটিকে ডিফল্ট হ্যান্ডলার হিসাবে যাচাই করে না যদি না এটি আপনার ম্যানিফেস্টে সংজ্ঞায়িত সমস্ত হোস্টের জন্য একটি মানানসই ডিজিটাল সম্পদ লিঙ্ক ফাইল খুঁজে না পায়৷

উদাহরণস্বরূপ, নিম্নলিখিত উদ্দেশ্য ফিল্টার সহ একটি অ্যাপ শুধুমাত্র https://www.example.com জন্য যাচাইকরণ পাস করবে যদি https://www.example.com/.well-known/assetlinks.json এ একটি assetlinks.json ফাইল পাওয়া যায়। https://www.example.com/.well-known/assetlinks.json কিন্তু নয় https://www.example.net/.well-known/assetlinks.json :

<application>

  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
    </intent-filter>
  </activity>
  <activity android:name=”SecondActivity”>
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
     <data android:host="www.example.net" />
    </intent-filter>
  </activity>

</application>

দ্রষ্টব্য: একই অভিপ্রায় ফিল্টারের সমস্ত <data> উপাদানগুলিকে তাদের সম্মিলিত বৈশিষ্ট্যগুলির সমস্ত বৈচিত্রের জন্য অ্যাকাউন্টে একত্রিত করা হয়েছে। উদাহরণস্বরূপ, উপরের প্রথম উদ্দেশ্য ফিল্টারটিতে একটি <data> উপাদান রয়েছে যা শুধুমাত্র HTTPS স্কিম ঘোষণা করে। কিন্তু এটি অন্যান্য <data> উপাদানের সাথে একত্রিত হয় যাতে অভিপ্রায় ফিল্টারটি http://www.example.com এবং https://www.example.com উভয়কেই সমর্থন করে। যেমন, আপনি যখন URI স্কিম এবং ডোমেনগুলির নির্দিষ্ট সমন্বয় সংজ্ঞায়িত করতে চান তখন আপনাকে অবশ্যই পৃথক অভিপ্রায় ফিল্টার তৈরি করতে হবে।

একাধিক সাবডোমেনের জন্য সহায়ক অ্যাপ লিঙ্কিং

ডিজিটাল অ্যাসেট লিঙ্ক প্রোটোকল আপনার অভিপ্রায় ফিল্টারগুলিতে সাবডোমেনগুলিকে অনন্য, পৃথক হোস্ট হিসাবে বিবেচনা করে। তাই যদি আপনার অভিপ্রায় ফিল্টার বিভিন্ন সাবডোমেন সহ একাধিক হোস্ট তালিকাভুক্ত করে, তাহলে আপনাকে অবশ্যই প্রতিটি ডোমেনে একটি বৈধ assetlinks.json প্রকাশ করতে হবে। উদাহরণস্বরূপ, নিম্নলিখিত অভিপ্রায় ফিল্টারটিতে www.example.com এবং mobile.example.com স্বীকৃত অভিপ্রায় URL হোস্ট হিসাবে অন্তর্ভুক্ত রয়েছে৷ সুতরাং একটি বৈধ assetlinks.json অবশ্যই https://www.example.com/.well-known/assetlinks.json এবং https://mobile.example.com/.well-known/assetlinks.json উভয় ঠিকানায় প্রকাশ করতে হবে।

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:scheme="https" />
      <data android:host="www.example.com" />
      <data android:host="mobile.example.com" />
    </intent-filter>
  </activity>
</application>

বিকল্পভাবে, আপনি যদি একটি ওয়াইল্ডকার্ড দিয়ে আপনার হোস্টনাম ঘোষণা করেন (যেমন *.example.com ), আপনাকে অবশ্যই আপনার assetlinks.json ফাইলটি রুট হোস্টনামে প্রকাশ করতে হবে ( example.com )। উদাহরণ স্বরূপ, যতক্ষণ পর্যন্ত assetlinks.json ফাইলটি https://example.com/.well-known/assetlinks.json এ প্রকাশিত হয় ততক্ষণ পর্যন্ত নিম্নোক্ত অভিপ্রায় ফিল্টার সহ একটি অ্যাপ example.com এর যেকোনো উপ-নামের জন্য (যেমন foo.example.com ) যাচাইকরণ পাস করবে https://example.com/.well-known/assetlinks.json :

<application>
  <activity android:name=”MainActivity”>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
      <data android:host="*.example.com" />
    </intent-filter>
  </activity>
</application>

একই ডোমেনের সাথে যুক্ত একাধিক অ্যাপের জন্য পরীক্ষা করুন

আপনি যদি একাধিক অ্যাপ্লিকেশান প্রকাশ করেন যেগুলির প্রত্যেকটি একই ডোমেনের সাথে যুক্ত, সেগুলির প্রতিটি সফলভাবে যাচাই করা যেতে পারে৷ যাইহোক, যদি অ্যাপগুলি ঠিক একই ডোমেন হোস্ট এবং পাথের সমাধান করতে পারে, যেমনটি একটি অ্যাপের লাইট এবং পূর্ণ সংস্করণের ক্ষেত্রে হতে পারে, শুধুমাত্র সম্প্রতি ইনস্টল করা অ্যাপটি সেই ডোমেনের জন্য ওয়েব ইন্টেন্টগুলি সমাধান করতে পারে।

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

ওয়েবসাইট সমিতি ঘোষণা

একটি ডিজিটাল সম্পদ লিঙ্ক JSON ফাইল অবশ্যই আপনার ওয়েবসাইটে প্রকাশ করতে হবে যাতে ওয়েবসাইটের সাথে যুক্ত অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি নির্দেশ করে এবং অ্যাপের URL ইন্টেন্টগুলি যাচাই করে৷ JSON ফাইলটি সংশ্লিষ্ট অ্যাপ সনাক্ত করতে নিম্নলিখিত ক্ষেত্রগুলি ব্যবহার করে:

  • package_name : অ্যাপের build.gradle ফাইলে ঘোষিত অ্যাপ্লিকেশন আইডি
  • sha256_cert_fingerprints : আপনার অ্যাপের সাইনিং সার্টিফিকেটের SHA256 ফিঙ্গারপ্রিন্ট। আপনি জাভা কীটুলের মাধ্যমে ফিঙ্গারপ্রিন্ট তৈরি করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
    keytool -list -v -keystore my-release-key.keystore
    
    এই ক্ষেত্রটি একাধিক আঙ্গুলের ছাপ সমর্থন করে, যা আপনার অ্যাপের বিভিন্ন সংস্করণকে সমর্থন করতে ব্যবহার করা যেতে পারে, যেমন ডিবাগ এবং প্রোডাকশন বিল্ড৷

    আপনি যদি আপনার অ্যাপের জন্য প্লে অ্যাপ সাইনিং ব্যবহার করেন, তাহলে স্থানীয়ভাবে keytool চালানোর মাধ্যমে উত্পাদিত শংসাপত্র ফিঙ্গারপ্রিন্ট সাধারণত ব্যবহারকারীদের ডিভাইসে থাকা একের সাথে মেলে না। আপনি Release > Setup > App signing অধীনে আপনার প্লে কনসোল ডেভেলপার অ্যাকাউন্টে আপনার অ্যাপের জন্য Play অ্যাপ সাইনিং ব্যবহার করছেন কিনা তা যাচাই করতে পারেন; যদি আপনি তা করেন, তাহলে আপনি একই পৃষ্ঠায় আপনার অ্যাপের জন্য সঠিক ডিজিটাল সম্পদ লিঙ্ক JSON স্নিপেটও পাবেন।

নিম্নলিখিত উদাহরণ assetlinks.json ফাইলটি একটি com.example Android অ্যাপে লিঙ্ক খোলার অধিকার প্রদান করে:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

একাধিক অ্যাপের সাথে একটি ওয়েবসাইট সংযুক্ত করা

একটি ওয়েবসাইট একই assetlinks.json ফাইলের মধ্যে একাধিক অ্যাপের সাথে অ্যাসোসিয়েশন ঘোষণা করতে পারে। নিম্নলিখিত ফাইল তালিকাটি একটি বিবৃতি ফাইলের একটি উদাহরণ দেখায় যা পৃথকভাবে দুটি অ্যাপের সাথে সম্পর্ক ঘোষণা করে এবং https://www.example.com/.well-known/assetlinks.json এ থাকে:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.puppies.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
  },
  {
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.monkeys.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

বিভিন্ন অ্যাপ একই ওয়েব হোস্টের অধীনে বিভিন্ন সংস্থানের লিঙ্ক পরিচালনা করতে পারে। উদাহরণস্বরূপ, app1 https://example.com/articles এর জন্য একটি অভিপ্রায় ফিল্টার ঘোষণা করতে পারে এবং app2 https://example.com/videos এর জন্য একটি অভিপ্রায় ফিল্টার ঘোষণা করতে পারে।

দ্রষ্টব্য: একটি ডোমেনের সাথে যুক্ত একাধিক অ্যাপ একই বা ভিন্ন শংসাপত্রের সাথে স্বাক্ষরিত হতে পারে।

একটি একক অ্যাপের সাথে একাধিক ওয়েবসাইট সংযুক্ত করা

একাধিক ওয়েবসাইট তাদের নিজ নিজ assetlinks.json ফাইলে একই অ্যাপের সাথে অ্যাসোসিয়েশন ঘোষণা করতে পারে। নিম্নলিখিত ফাইল তালিকাগুলি app1 এর সাথে example.com এবং example.net এর অ্যাসোসিয়েশন ঘোষণা করার একটি উদাহরণ দেখায়৷ প্রথম তালিকাটি app1-এর সাথে example.com-এর সংযোগ দেখায়:

https://www.example.com/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

পরবর্তী তালিকায় app1 এর সাথে example.net এর সংযোগ দেখায়। শুধুমাত্র সেই অবস্থান যেখানে এই ফাইলগুলি হোস্ট করা হয়েছে তা আলাদা ( .com এবং .net ):

https://www.example.net/.well-known/assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]

JSON যাচাইকরণ ফাইল প্রকাশ করা হচ্ছে

আপনাকে অবশ্যই নিম্নলিখিত অবস্থানে আপনার JSON যাচাইকরণ ফাইল প্রকাশ করতে হবে:

https://domain.name/.well-known/assetlinks.json

নিম্নলিখিত বিষয়ে নিশ্চিত হন:

  • assetlinks.json ফাইলটি কন্টেন্ট-টাইপ application/json এর সাথে পরিবেশন করা হয়।
  • assetlinks.json ফাইলটি অবশ্যই HTTPS সংযোগের মাধ্যমে অ্যাক্সেসযোগ্য হতে হবে, আপনার অ্যাপের উদ্দেশ্য ফিল্টারগুলি HTTPS কে ডেটা স্কিম হিসাবে ঘোষণা করুক না কেন।
  • assetlinks.json ফাইলটি অবশ্যই কোনো রিডাইরেক্ট ছাড়াই অ্যাক্সেসযোগ্য হতে হবে (কোন 301 বা 302 রিডাইরেক্ট নয়)।
  • যদি আপনার অ্যাপ লিঙ্ক একাধিক হোস্ট ডোমেন সমর্থন করে, তাহলে আপনাকে অবশ্যই প্রতিটি ডোমেনে assetlinks.json ফাইল প্রকাশ করতে হবে। একাধিক হোস্টের জন্য সহায়ক অ্যাপ লিঙ্কিং দেখুন।
  • জনসাধারণের কাছে অ্যাক্সেসযোগ্য নাও হতে পারে এমন ম্যানিফেস্ট ফাইলে ডেভ/টেস্ট URL সহ আপনার অ্যাপ প্রকাশ করবেন না (যেমন যেকোনও যা শুধুমাত্র একটি VPN দিয়ে অ্যাক্সেসযোগ্য)। এই ধরনের ক্ষেত্রে একটি কাজ হল ডেভ বিল্ডগুলির জন্য একটি ভিন্ন ম্যানিফেস্ট ফাইল তৈরি করতে বিল্ড ভেরিয়েন্টগুলি কনফিগার করা

অ্যান্ড্রয়েড অ্যাপ লিঙ্ক যাচাইকরণ

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

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

সিস্টেমের স্বয়ংক্রিয় যাচাইকরণে নিম্নলিখিতগুলি জড়িত:

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

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

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

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

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

পরীক্ষা অ্যাপ্লিকেশন লিঙ্ক

অ্যাপ লিঙ্কিং বৈশিষ্ট্য বাস্তবায়ন করার সময়, সিস্টেমটি আপনার ওয়েবসাইটগুলির সাথে আপনার অ্যাপকে সংযুক্ত করতে পারে এবং আপনার প্রত্যাশা অনুযায়ী ইউআরএল অনুরোধগুলি পরিচালনা করতে পারে তা নিশ্চিত করতে আপনার লিঙ্ক করার কার্যকারিতা পরীক্ষা করা উচিত।

একটি বিদ্যমান স্টেটমেন্ট ফাইল পরীক্ষা করতে, আপনি স্টেটমেন্ট লিস্ট জেনারেটর এবং টেস্টার টুল ব্যবহার করতে পারেন।

যাচাই করতে হোস্টের তালিকা নিশ্চিত করুন

পরীক্ষা করার সময়, আপনাকে সংশ্লিষ্ট হোস্টের তালিকা নিশ্চিত করতে হবে যা সিস্টেমটি আপনার অ্যাপের জন্য যাচাই করবে। সমস্ত ইউআরএলগুলির একটি তালিকা তৈরি করুন যার সংশ্লিষ্ট অভিপ্রায় ফিল্টারগুলিতে নিম্নলিখিত বৈশিষ্ট্য এবং উপাদানগুলি অন্তর্ভুক্ত রয়েছে:

  • android:scheme http বা https এর মান সহ স্কিম বৈশিষ্ট্য
  • android:host বৈশিষ্ট্য
  • android.intent.action.VIEW অ্যাকশন এলিমেন্ট
  • android.intent.category.BROWSABLE বিভাগ উপাদান

প্রতিটি নামযুক্ত হোস্ট এবং সাবডোমেনে একটি ডিজিটাল সম্পদ লিঙ্ক JSON ফাইল সরবরাহ করা হয়েছে তা পরীক্ষা করতে এই তালিকাটি ব্যবহার করুন৷

ডিজিটাল সম্পদ লিঙ্ক ফাইল নিশ্চিত করুন

প্রতিটি ওয়েবসাইটের জন্য, ডিজিটাল সম্পদ লিঙ্কস এপিআই ব্যবহার করে নিশ্চিত করুন যে ডিজিটাল সম্পদ লিঙ্ক JSON ফাইলটি সঠিকভাবে হোস্ট করা এবং সংজ্ঞায়িত করা হয়েছে:

https://digitalassetlinks.googleapis.com/v1/statements:list?
   source.web.site=https://domain.name:optional_port&
   relation=delegate_permission/common.handle_all_urls

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

adb shell dumpsys package domain-preferred-apps

অথবা নিম্নলিখিত একই জিনিস করে:

adb shell dumpsys package d

দ্রষ্টব্য: নিশ্চিত করুন যে আপনি আপনার অ্যাপ ইনস্টল করার পরে কমপক্ষে 20 সেকেন্ড অপেক্ষা করুন যাতে সিস্টেমটি যাচাইকরণ প্রক্রিয়াটি সম্পূর্ণ করতে পারে।

কমান্ডটি নিম্নলিখিত বিন্যাসে একটি শিরোনাম দ্বারা পূর্বে ডিভাইসে সংজ্ঞায়িত প্রতিটি ব্যবহারকারী বা প্রোফাইলের একটি তালিকা প্রদান করে:

App linkages for user 0:

এই শিরোনাম অনুসরণ করে, আউটপুট সেই ব্যবহারকারীর জন্য লিঙ্ক-হ্যান্ডলিং সেটিংস তালিকাভুক্ত করতে নিম্নলিখিত বিন্যাস ব্যবহার করে:

Package: com.android.vending
Domains: play.google.com market.android.com
Status: always : 200000002

এই তালিকাটি নির্দেশ করে যে কোন অ্যাপগুলি সেই ব্যবহারকারীর জন্য কোন ডোমেনের সাথে যুক্ত:

  • Package - একটি অ্যাপকে প্যাকেজ নামের দ্বারা চিহ্নিত করে, যেমনটি এর ম্যানিফেস্টে ঘোষণা করা হয়েছে।
  • Domains - হোস্টগুলির সম্পূর্ণ তালিকা দেখায় যাদের ওয়েব লিঙ্কগুলি এই অ্যাপটি পরিচালনা করে, ফাঁকা স্থানগুলিকে ডিলিমিটার হিসাবে ব্যবহার করে৷
  • Status - এই অ্যাপের বর্তমান লিঙ্ক-হ্যান্ডলিং সেটিং দেখায়। একটি অ্যাপ যা যাচাইকরণে উত্তীর্ণ হয়েছে, এবং যার ম্যানিফেস্টে রয়েছে android:autoVerify="true" , always একটি স্থিতি দেখায়৷ এই স্থিতির পরে হেক্সাডেসিমেল সংখ্যাটি ব্যবহারকারীর অ্যাপ লিঙ্কেজ পছন্দগুলির Android সিস্টেমের রেকর্ডের সাথে সম্পর্কিত৷ এই মান যাচাই করা সফল হয়েছে কিনা তা নির্দেশ করে না।

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

পরীক্ষার উদাহরণ

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

<application>

    <activity android:name=”MainActivity”>
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:scheme="https" />
            <data android:host="www.example.com" />
            <data android:host="mobile.example.com" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:host="www.example2.com" />
        </intent-filter>
    </activity>

    <activity android:name=”SecondActivity”>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="https" />
            <data android:host="account.example.com" />
        </intent-filter>
    </activity>

      <activity android:name=”ThirdActivity”>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="https" />
            <data android:host="map.example.com" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="market" />
            <data android:host="example.com" />
        </intent-filter>
      </activity>

</application>

হোস্টের তালিকা যা প্ল্যাটফর্মটি উপরের ম্যানিফেস্ট থেকে যাচাই করার চেষ্টা করবে:

www.example.com
mobile.example.com
www.example2.com
account.example.com

হোস্টের তালিকা যা প্ল্যাটফর্মটি উপরের ম্যানিফেস্ট থেকে যাচাই করার চেষ্টা করবে না:

map.example.com (it does not have android.intent.category.BROWSABLE)
market://example.com (it does not have either an "http" or "https" scheme)

বিবৃতি তালিকা সম্পর্কে আরও জানতে, একটি বিবৃতি তালিকা তৈরি করা দেখুন।

সাধারণ বাস্তবায়ন ত্রুটিগুলি ঠিক করুন

আপনি যদি আপনার অ্যান্ড্রয়েড অ্যাপ লিঙ্কগুলি যাচাই করতে না পারেন তবে নিম্নলিখিত সাধারণ ত্রুটিগুলি পরীক্ষা করুন৷ এই বিভাগটি example.com একটি স্থানধারক ডোমেন নাম হিসাবে ব্যবহার করে; এই চেকগুলি সম্পাদন করার সময়, আপনার সার্ভারের প্রকৃত ডোমেন নামের সাথে example.com প্রতিস্থাপন করুন।

ভুল অভিপ্রায় ফিল্টার সেট আপ
আপনার অ্যাপের কোনো <intent-filter> এলিমেন্টের মালিকানা নেই এমন URL আপনি অন্তর্ভুক্ত করেছেন কিনা তা পরীক্ষা করে দেখুন।
ভুল সার্ভার কনফিগারেশন

আপনার সার্ভারের JSON কনফিগারেশন চেক করুন, এবং নিশ্চিত করুন যে SHA মান সঠিক।

এছাড়াও, যে example.com. (পরবর্তী সময়ের সাথে) example.com মতো একই বিষয়বস্তু পরিবেশন করে।

সার্ভার-সাইড রিডাইরেক্ট

আপনি যদি নিম্নলিখিতগুলির মতো একটি পুনঃনির্দেশ সেট আপ করেন তবে সিস্টেমটি আপনার অ্যাপের জন্য কোনও Android অ্যাপ লিঙ্ক যাচাই করে না:

  • http://example.com থেকে https://example.com
  • example.com থেকে www.example.com

এই আচরণ আপনার অ্যাপের নিরাপত্তা রক্ষা করে।

সার্ভারের দৃঢ়তা

আপনার সার্ভার আপনার ক্লায়েন্ট অ্যাপ্লিকেশনের সাথে সংযোগ করতে পারে কিনা তা পরীক্ষা করুন।

অ-যাচাইযোগ্য লিঙ্ক

পরীক্ষার উদ্দেশ্যে, আপনি ইচ্ছাকৃতভাবে অ-যাচাইযোগ্য লিঙ্ক যোগ করতে পারেন। মনে রাখবেন যে, Android 11 এবং তার চেয়ে কম সংস্করণে, এই লিঙ্কগুলির কারণে সিস্টেম আপনার অ্যাপের জন্য সমস্ত Android অ্যাপ লিঙ্ক যাচাই করে না।

assetlinks.json-এ ভুল স্বাক্ষর

যাচাই করুন যে আপনার স্বাক্ষর সঠিক এবং আপনার অ্যাপে স্বাক্ষর করতে ব্যবহৃত স্বাক্ষরের সাথে মেলে। সাধারণ ভুল অন্তর্ভুক্ত:

  • একটি ডিবাগ শংসাপত্র দিয়ে অ্যাপে স্বাক্ষর করা এবং শুধুমাত্র assetlinks.json এ রিলিজ স্বাক্ষর থাকা।
  • assetlinks.json এ একটি ছোট হাতের স্বাক্ষর থাকা। স্বাক্ষর বড় হাতের অক্ষরে হওয়া উচিত।
  • আপনি যদি প্লে অ্যাপ সাইনিং ব্যবহার করেন, তাহলে নিশ্চিত করুন যে আপনি সেই স্বাক্ষর ব্যবহার করছেন যা Google আপনার প্রতিটি রিলিজে স্বাক্ষর করতে ব্যবহার করে। আপনি ওয়েবসাইট অ্যাসোসিয়েশন ঘোষণা করার নির্দেশাবলী অনুসরণ করে একটি সম্পূর্ণ JSON স্নিপেট সহ এই বিবরণগুলি যাচাই করতে পারেন।