গভীর লিঙ্ক তৈরি করুন

ডিপ লিঙ্কিং আপনাকে ওয়েব ব্রাউজার, নোটিফিকেশন, সোশ্যাল মিডিয়া, বিজ্ঞাপন এবং অন্যান্য উৎস থেকে ব্যবহারকারীদের সরাসরি আপনার অ্যাপে নিয়ে আসতে সাহায্য করে। ডিপ লিঙ্ক সরাসরি অ্যাপ-টু-অ্যাপ এবং ওয়েব-টু-অ্যাপ ট্রানজিশন প্রদান করে, যা প্রাসঙ্গিক ও টার্গেটেড কন্টেন্টের মাধ্যমে এনগেজমেন্ট বাড়াতে আপনাকে সহায়তা করতে পারে।

এই নির্দেশিকায় ব্যাখ্যা করা হয়েছে ডিপ লিঙ্কিং কীভাবে কাজ করে এবং আপনার কন্টেন্টের জন্য কীভাবে ডিপ লিঙ্ক তৈরি ও পরীক্ষা করতে হয়।

যেসব ডিপ লিঙ্ক আপনার নিজের ওয়েবসাইট বা ডোমেইনকে নির্দেশ করে, সেগুলোর জন্য আমরা অ্যাপ লিঙ্কস ব্যবহারের পরামর্শ দিই, যা আপনার ব্যবহারকারীদের জন্য একটি নির্বিঘ্ন ও বিশ্বস্ত অভিজ্ঞতা প্রদান করে।

ডিপ লিঙ্কিং কীভাবে কাজ করে

ডিপ লিঙ্কিং হলো অ্যান্ড্রয়েডের একটি সাধারণ সিস্টেম সক্ষমতা, যা সব সংস্করণে এবং সব ডিভাইসে সমর্থিত। এটি অ্যান্ড্রয়েডের ইন্টেন্টস সিস্টেম ব্যবহার করে আগ্রহী অ্যাপগুলোতে ডিপ লিঙ্ক রাউট করে। যে অ্যাপগুলো একটি নির্দিষ্ট ডিপ লিঙ্ক ইউআরআই পরিচালনা করতে চায়, তারা তাদের অ্যাপ ম্যানিফেস্ট ফাইলে একটি উপযুক্ত ইন্টেন্ট ফিল্টার ঘোষণা করে।

রানটাইমে, যখন ব্যবহারকারী কোনো লিঙ্কে ট্যাপ করেন, অ্যান্ড্রয়েড একটি ইন্টেন্ট ট্রিগার করে এবং সেটিকে একটি অ্যাপে রাউট করার চেষ্টা করে। যেহেতু একাধিক অ্যাপ একটি নির্দিষ্ট URI-এর সাথে মেলে এমন ইন্টেন্ট ফিল্টার ঘোষণা করতে পারে, তাই অ্যান্ড্রয়েড ইন্টেন্টটি রাউট করার জন্য এই ক্রমে নিম্নলিখিত পদক্ষেপগুলি গ্রহণ করে:

  1. ব্যবহারকারীর ডিফল্ট অ্যাপটি খুলুন যেটি URI-টি পরিচালনা করতে পারে, যদি কোনোটি নির্দিষ্ট করা হয়ে থাকে।
  2. একমাত্র উপলব্ধ অ্যাপটি খুলুন যা URI-টি পরিচালনা করতে পারে।
  3. ব্যবহারকারীকে একটি দ্ব্যর্থতা নিরসন ডায়ালগ থেকে একটি অ্যাপ নির্বাচন করার অনুমতি দিন।

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

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

চিত্র ১. দ্ব্যর্থতা নিরসন সংলাপ

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

দ্রষ্টব্য : অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) থেকে, একটি জেনেরিক ওয়েব ইন্টেন্ট আপনার অ্যাপের কোনো অ্যাক্টিভিটিতে তখনই রিজলভ হবে, যদি আপনার অ্যাপটি সেই ওয়েব ইন্টেন্টে থাকা নির্দিষ্ট ডোমেইনের জন্য অনুমোদিত হয়। যদি আপনার অ্যাপটি ডোমেইনটির জন্য অনুমোদিত না হয়, তবে ওয়েব ইন্টেন্টটি এর পরিবর্তে ব্যবহারকারীর ডিফল্ট ব্রাউজার অ্যাপে রিজলভ হবে।

ডিপ লিঙ্কের প্রকারভেদ

অ্যান্ড্রয়েডে তিন ধরনের ডিপ লিঙ্ক সমর্থন করা যায়:

  • কাস্টম ডিপ লিঙ্ক : এগুলি এমন ডিপ লিঙ্ক যা একটি কাস্টম URI স্কিম (যেমন example://products/123 ) ব্যবহার করে ব্যবহারকারীকে সরাসরি অ্যাপের মধ্যে থাকা কোনো নির্দিষ্ট কন্টেন্টে নিয়ে যায়। অভ্যন্তরীণ নেভিগেশন বা আপনার নিয়ন্ত্রিত উৎস থেকে লিঙ্কের জন্য এগুলি শক্তিশালী, কিন্তু এগুলি সাধারণ ওয়েব লিঙ্ক নয় এবং অন্য কোনো অ্যাপ একই কাস্টম স্কিম রেজিস্টার করলে এগুলি ডিসঅ্যাম্বিগুয়েশন ডায়ালগ চালু করতে পারে।
  • ওয়েব লিঙ্ক : এগুলো হলো ডিপ লিঙ্ক যা স্ট্যান্ডার্ড http এবং https স্কিম ব্যবহার করে। এগুলো স্ট্যান্ডার্ড ইউআরএল হওয়ায় বেশি বহুমুখী, কিন্তু অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণগুলোতে এগুলো প্রায় সবসময়ই ডিসঅ্যাম্বিগুয়েশন ডায়ালগ চালু করে, যার অর্থ হলো ডিফল্টভাবে এগুলো আপনার অ্যাপে রাউট না হয়ে ব্যবহারকারীর ওয়েব ব্রাউজার দ্বারা পরিচালিত হওয়ার সম্ভাবনাই বেশি।
  • অ্যাপ লিঙ্ক : অ্যান্ড্রয়েড ৬.০ (এপিআই লেভেল ২৩) থেকে উপলব্ধ, এগুলি হলো যাচাইকৃত ওয়েব লিঙ্ক। ওয়েবসাইট অ্যাসোসিয়েশন প্রক্রিয়ার মাধ্যমে, আপনি অ্যান্ড্রয়েড সিস্টেমকে প্রমাণ করতে পারেন যে ডোমেইনটির মালিক আপনি। একবার যাচাই হয়ে গেলে, সিস্টেমটি স্বয়ংক্রিয়ভাবে সেই ডোমেইনের লিঙ্কগুলিকে সরাসরি আপনার অ্যাপে পাঠিয়ে দেয় এবং ডিসঅ্যাম্বিগিউশন ডায়ালগটি পুরোপুরি এড়িয়ে যায়। এটি আপনার ব্যবহারকারীদের জন্য একটি বিশ্বস্ত এবং নির্বিঘ্ন অভিজ্ঞতা তৈরি করে।

ইনকামিং লিঙ্কের জন্য ইন্টেন্ট ফিল্টার যোগ করুন

আপনার অ্যাপের কন্টেন্টের সাথে লিঙ্ক তৈরি করতে, আপনার ম্যানিফেস্টে এমন একটি ইন্টেন্ট ফিল্টার যোগ করুন যাতে এই এলিমেন্ট এবং অ্যাট্রিবিউটের মানগুলো থাকে:

<action>

ACTION_VIEW ইন্টেন্ট অ্যাকশনটি নির্দিষ্ট করুন, যাতে গুগল সার্চ থেকে ইন্টেন্ট ফিল্টারটি অ্যাক্সেস করা যায়।

<data>

এক বা একাধিক <data> ট্যাগ যোগ করুন, যার প্রতিটি একটি URI ফরম্যাটকে প্রতিনিধিত্ব করে যা অ্যাক্টিভিটিতে রিজলভ হয়। ন্যূনতমপক্ষে, <data> ট্যাগে অবশ্যই android:scheme অ্যাট্রিবিউটটি অন্তর্ভুক্ত থাকতে হবে।

অ্যাক্টিভিটি কোন ধরনের URI গ্রহণ করবে তা আরও সুনির্দিষ্ট করতে আপনি অতিরিক্ত অ্যাট্রিবিউট যোগ করতে পারেন। উদাহরণস্বরূপ, আপনার একাধিক অ্যাক্টিভিটি থাকতে পারে যেগুলো একই ধরনের URI গ্রহণ করে, কিন্তু শুধুমাত্র পাথের নামের উপর ভিত্তি করে তাদের মধ্যে পার্থক্য থাকে। এই ক্ষেত্রে, বিভিন্ন URI পাথের জন্য সিস্টেম কোন অ্যাক্টিভিটি খুলবে তা নির্ধারণ করতে android:path অ্যাট্রিবিউট অথবা এর pathPattern বা pathPrefix ভ্যারিয়েন্টগুলো ব্যবহার করুন।

<category>

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

DEFAULT ক্যাটাগরিটিও অন্তর্ভুক্ত করুন। এটি আপনার অ্যাপকে ইমপ্লিসিট ইন্টেন্ট-এ সাড়া দেওয়ার সুযোগ দেয়। এটি ছাড়া, অ্যাক্টিভিটিটি কেবল তখনই শুরু করা যাবে, যখন ইন্টেন্টটিতে আপনার অ্যাপ কম্পোনেন্টের নামটি উল্লেখ করা থাকবে।

নিম্নলিখিত XML স্নিপেটটি দেখায় যে আপনি কীভাবে ডিপ লিঙ্কিংয়ের জন্য আপনার ম্যানিফেস্টে একটি ইন্টেন্ট ফিল্টার নির্দিষ্ট করতে পারেন। "example://gizmos" এবং "http://www.example.com/gizmos" উভয় URI-ই এই অ্যাক্টিভিটিতে রিজলভ হয়।

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

লক্ষ্য করুন যে, দুটি ইন্টেন্ট ফিল্টারের মধ্যে পার্থক্য শুধুমাত্র <data> এলিমেন্টের ক্ষেত্রে। যদিও একই ফিল্টারে একাধিক <data> এলিমেন্ট অন্তর্ভুক্ত করা সম্ভব, তবে যখন আপনার উদ্দেশ্য স্বতন্ত্র URL (যেমন scheme এবং host একটি নির্দিষ্ট সংমিশ্রণ) ঘোষণা করা, তখন আলাদা ফিল্টার তৈরি করা গুরুত্বপূর্ণ। কারণ, একই ইন্টেন্ট ফিল্টারের মধ্যে থাকা একাধিক <data> এলিমেন্ট তাদের সম্মিলিত অ্যাট্রিবিউটের সমস্ত ভিন্নতা বিবেচনা করার জন্য আসলে একত্রিত হয়ে যায়। উদাহরণস্বরূপ, নিম্নলিখিতটি বিবেচনা করুন:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

দেখে মনে হতে পারে যে এটি শুধু https://www.example.com এবং app://open.my.app সমর্থন করে। তবে, এটি আসলে ঐ দুটির পাশাপাশি app://www.example.com এবং https://open.my.app কেও সমর্থন করে।

সতর্কতা : যদি একাধিক অ্যাক্টিভিটিতে এমন ইন্টেন্ট ফিল্টার থাকে যা একই যাচাইকৃত অ্যান্ড্রয়েড অ্যাপ লিঙ্কে নিয়ে যায়, তাহলে কোন অ্যাক্টিভিটি লিঙ্কটি পরিচালনা করবে তার কোনো নিশ্চয়তা নেই।

আপনার অ্যাপ ম্যানিফেস্টে অ্যাক্টিভিটি কন্টেন্টের জন্য URI সহ ইন্টেন্ট ফিল্টার একবার যোগ করলে, অ্যান্ড্রয়েড রানটাইমে মিলে যাওয়া URI সহ যেকোনো Intent আপনার অ্যাপে রাউট করতে পারে।

ইনটেন্ট ফিল্টার নির্ধারণ সম্পর্কে আরও জানতে, “অন্যান্য অ্যাপকে আপনার অ্যাক্টিভিটি শুরু করার অনুমতি দিন” দেখুন।

আগত ইন্টেন্ট থেকে ডেটা পড়ুন

সিস্টেম যখন একটি ইন্টেন্ট ফিল্টারের মাধ্যমে আপনার অ্যাক্টিভিটি শুরু করে, তখন কী রেন্ডার করতে হবে তা নির্ধারণ করার জন্য আপনি Intent থেকে প্রাপ্ত ডেটা ব্যবহার করতে পারেন। আগত Intent সাথে সম্পর্কিত ডেটা এবং অ্যাকশন পেতে getData() এবং getAction() মেথডগুলো কল করুন। আপনি অ্যাক্টিভিটির লাইফসাইকেলের যেকোনো সময়ে এই মেথডগুলো কল করতে পারেন, তবে সাধারণত onCreate() বা onStart এর মতো প্রাথমিক কলব্যাকগুলোতে এটি করা উচিত।

এখানে একটি কোড স্নিপেট দেওয়া হলো যা দেখায় কিভাবে একটি Intent থেকে ডেটা পুনরুদ্ধার করতে হয়:

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

জাভা

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে এই সর্বোত্তম পদ্ধতিগুলো অনুসরণ করুন:

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

আপনার গভীর সংযোগগুলি পরীক্ষা করুন

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

adb ব্যবহার করে একটি ইনটেন্ট ফিল্টার URI পরীক্ষা করার সাধারণ সিনট্যাক্সটি হলো:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি নির্দিষ্ট URI-এর সাথে যুক্ত একটি টার্গেট অ্যাপ অ্যাক্টিভিটি দেখার চেষ্টা করে।

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

দ্রষ্টব্য : কোনো রাউটে প্রিমিটিভ টাইপের একটি সংগ্রহ সংজ্ঞায়িত করার সময়, যেমন **@Serializable data class Product(val colors: List)** , স্বয়ংক্রিয়ভাবে তৈরি হওয়া ডিপ লিঙ্ক URL ফরম্যাটটি হলো **basePath?colors={value**} । আপনি যদি একাধিক কোয়েরি প্যারামিটার সহ একটি URI নির্দিষ্ট করার চেষ্টা করেন (উদাহরণস্বরূপ, **basepath?colors=red&colors=blue** ), তাহলে আপনাকে অবশ্যই অ্যামপারস্যান্ডটিকে এস্কেপ করতে হবে (উদাহরণস্বরূপ, **basepath?colors=red\&colors=blue** )।

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

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