অ্যাপ সামগ্রীতে গভীর লিঙ্ক তৈরি করুন

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

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

আপনার সামগ্রীর লিঙ্কগুলি তৈরি এবং পরীক্ষা করতে নীচের পদক্ষেপগুলি অনুসরণ করুন৷ আপনি অ্যান্ড্রয়েড অ্যাপ লিঙ্ক যোগ করতে অ্যান্ড্রয়েড স্টুডিওতে অ্যাপ লিঙ্ক সহকারী ব্যবহার করতে পারেন।

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

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

আপনার অ্যাপের সামগ্রীতে একটি লিঙ্ক তৈরি করতে, আপনার ম্যানিফেস্টে এই উপাদানগুলি এবং বৈশিষ্ট্যের মানগুলি ধারণ করে এমন একটি অভিপ্রায় ফিল্টার যোগ করুন:

<action>
ACTION_VIEW ইন্টেন্ট অ্যাকশন নির্দিষ্ট করুন যাতে Google সার্চ থেকে ইনটেন্ট ফিল্টারে পৌঁছানো যায়।
<data>
এক বা একাধিক <data> ট্যাগ যোগ করুন, যার প্রতিটি একটি URI বিন্যাস উপস্থাপন করে যা কার্যকলাপের সমাধান করে। ন্যূনতম, <data> ট্যাগে অবশ্যই android:scheme অ্যাট্রিবিউট থাকতে হবে।

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

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

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

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

<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> উপাদান অন্তর্ভুক্ত করা সম্ভব, তবে এটি গুরুত্বপূর্ণ যে আপনি আলাদা ফিল্টার তৈরি করুন যখন আপনার উদ্দেশ্য অনন্য ইউআরএল ঘোষণা করা হয় (যেমন 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 রুট করতে পারবে Android।

অভিপ্রায় ফিল্টারগুলি সংজ্ঞায়িত করার বিষয়ে আরও জানতে, আপনার কার্যকলাপ শুরু করার জন্য অন্যান্য অ্যাপগুলিকে অনুমতি দিন দেখুন৷

ইনকামিং ইন্টেন্ট থেকে ডেটা পড়ুন

একবার সিস্টেমটি একটি ইন্টেন্ট ফিল্টারের মাধ্যমে আপনার কার্যকলাপ শুরু করলে, আপনি কি রেন্ডার করতে হবে তা নির্ধারণ করতে 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 shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

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

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

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

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