ডিপ লিঙ্কিংয়ের মাধ্যমে আপনি ব্যবহারকারীদের ওয়েব ব্রাউজার, বিজ্ঞপ্তি, সোশ্যাল মিডিয়া, বিজ্ঞাপন ও অন্যান্য সোর্স থেকে সরাসরি আপনার অ্যাপে নিয়ে আসতে পারবেন। ডিপ লিঙ্কের মাধ্যমে সরাসরি অ্যাপ-টু-অ্যাপ এবং ওয়েব-টু-অ্যাপ ট্রানজিশন করা যায় যা প্রাসঙ্গিক, টার্গেট করা কন্টেন্টের মাধ্যমে এনগেজমেন্ট বাড়াতে সাহায্য করে।
ডিপ লিঙ্কিং কীভাবে কাজ করে এবং আপনার কন্টেন্টের জন্য কীভাবে ডিপ লিঙ্ক তৈরি ও পরীক্ষা করবেন তা এই গাইডে ব্যাখ্যা করা হয়েছে।
আপনার নিজের ওয়েবসাইট বা ডোমেনকে রেফার করে এমন ডিপ লিঙ্কের জন্য, আমরা অ্যাপ লিঙ্ক ব্যবহার করার সাজেশন দিই, যা আপনার ব্যবহারকারীদের জন্য একটি নিরবচ্ছিন্ন, বিশ্বস্ত অভিজ্ঞতা প্রদান করে।
ডিপ লিঙ্কিং কীভাবে কাজ করে
ডিপ লিঙ্কিং হল Android-এর একটি সাধারণ সিস্টেম ক্ষমতা, যা সব ডিভাইসে, সব ভার্সনে কাজ করে। এটি Android-এর ইন্টেন্ট সিস্টেমের সুবিধা নিয়ে আগ্রহী অ্যাপে ডিপ লিঙ্ক পাঠায়। যেসব অ্যাপ নির্দিষ্ট ডিপ লিঙ্ক URI ম্যানেজ করতে চায়, সেগুলি অ্যাপ ম্যানিফেস্ট ফাইলে ম্যাচিং ইনটেন্ট ফিল্টার ঘোষণা করে।
রানটাইমে, ব্যবহারকারী কোনও লিঙ্কে ট্যাপ করলে, Android একটি ইনটেন্ট ট্রিগার করে এবং সেটিকে কোনও অ্যাপে রুট করার চেষ্টা করে। একাধিক অ্যাপ ইনটেন্ট ফিল্টার ঘোষণা করতে পারে যা প্রদত্ত URI-এর সাথে মেলে, তাই Android ইনটেন্ট রুট করার জন্য এই ক্রমে, এইসব অ্যাকশন নেয়:
- ব্যবহারকারীর ডিফল্ট অ্যাপ খুলুন যা URI ম্যানেজ করতে পারে, যদি কোনও একটি নির্দিষ্ট করা থাকে।
- URI ম্যানেজ করতে পারে এমন একমাত্র উপলভ্য অ্যাপ খুলুন।
- ব্যবহারকারীকে দ্ব্যর্থতা নিরসন ডায়ালগ থেকে কোনও অ্যাপ বেছে নেওয়ার অনুমতি দিন।
এর অর্থ হল, আপনার ইনটেন্ট ফিল্টার কোনও প্রদত্ত URI-এর সাথে মিললেও, সিস্টেম যে ডিপ লিঙ্ক ইনটেন্ট আপনার অ্যাপে রুট করবে, তার কোনও গ্যারান্টি নেই। কোন অ্যাপ ইনটেন্ট ম্যানেজ করবে তা ব্যবহারকারীই ঠিক করেন, যা তাদের নিয়ন্ত্রণ ও পছন্দ করার সুযোগ দেয়। আপনার নিজের ওয়েবসাইট ও ডোমেনের ডিপ লিঙ্কের উপর আরও নিয়ন্ত্রণ পেতে, অ্যাপ লিঙ্ক ব্যবহার করে দেখুন।
Android-এর দ্ব্যর্থতা নিরসন ডায়ালগ ব্যবহারকারীকে সেইসব ইনস্টল করা অ্যাপ দেখতে দেয় যেগুলি ডিপ লিঙ্ক ইনটেন্ট ম্যানেজ করার জন্য রেজিস্টার করা হয়েছে। এছাড়াও, ব্যবহারকারী এই ধরনের লিঙ্কের জন্য ডিফল্ট হিসেবে কোনও অ্যাপ বেছে নিতে পারেন। ব্যবহারকারী ডিফল্ট সেট করে নিলে, সিস্টেম আর সেই নির্দিষ্ট ইনটেন্টের জন্য ডায়ালগ দেখায় না এবং বেছে নেওয়া অ্যাপটি অটোমেটিক খুলে যাবে।
বিভিন্ন Android ভার্সন জুড়ে দ্ব্যর্থতা নিরসন ডায়ালগের আচরণে পরিবর্তন এসেছে। যেমন, Android 12 ও তার পরবর্তী ভার্সনে, যাচাই করা হয়নি এমন অ্যাপ লিঙ্কের ওয়েব লিঙ্ক সাধারণত ডিফল্ট হিসেবে ওয়েব ব্রাউজারে খুলবে, যেখানে আগের ভার্সনে, কোনও অ্যাপ ওয়েব লিঙ্ক ম্যানেজ করতে পারলে, একটি দ্ব্যর্থতা নিরসন ডায়ালগ দেখানো হতে পারে।
ডিপ লিঙ্কের ধরন
Android-এ আপনি তিন ধরনের ডিপ লিঙ্ক ব্যবহার করতে পারবেন:
- কাস্টম ডিপ লিঙ্ক: এগুলি হল ডিপ লিঙ্ক যা কাস্টম URI স্কিম (যেমন
example://products/123) ব্যবহার করে কোনও ব্যবহারকারীকে সরাসরি অ্যাপের মধ্যে নির্দিষ্ট কন্টেন্টে নিয়ে যায়। এগুলি ইন্টার্নাল নেভিগেশন বা আপনার কন্ট্রোল করা সোর্স থেকে লিঙ্কের জন্য শক্তিশালী, তবে এগুলি স্ট্যান্ডার্ড ওয়েব লিঙ্ক নয় এবং অন্য কোনও অ্যাপ একই কাস্টম স্কিম রেজিস্টার করলে এখনও দ্ব্যর্থতা নিরসন ডায়ালগ ট্রিগার করতে পারে। - ওয়েব লিঙ্ক: এগুলি হল ডিপ লিঙ্ক যা স্ট্যান্ডার্ড
httpএবংhttpsস্কিম ব্যবহার করে। এগুলি স্ট্যান্ডার্ড URL হওয়ায় আরও বেশি বহুমুখী, তবে Android 12 এবং তার পরবর্তী ভার্সনে এগুলি প্রায় সবসময়ই দ্ব্যর্থতা নিরসন ডায়ালগ ট্রিগার করবে, যার অর্থ হল এগুলি আপনার অ্যাপে রাউট হওয়ার পরিবর্তে ডিফল্ট হিসেবে ব্যবহারকারীর ওয়েব ব্রাউজার দ্বারা ম্যানেজ হওয়ার সম্ভাবনা বেশি। - অ্যাপ লিঙ্ক: Android 6.0 (API লেভেল 23) থেকে উপলভ্য, এগুলি হল যাচাই করা ওয়েব লিঙ্ক। ওয়েবসাইট অ্যাসোসিয়েশন প্রসেসের মাধ্যমে, আপনি Android সিস্টেমের কাছে প্রমাণ করতে পারবেন যে আপনি ডোমেনের মালিক। যাচাই করা হয়ে গেলে, সিস্টেম অটোমেটিক সেই ডোমেনের লিঙ্ক সরাসরি আপনার অ্যাপে রুট করে, অস্পষ্টতা দূর করার ডায়ালগ সম্পূর্ণভাবে এড়িয়ে যায়। এটি আপনার ব্যবহারকারীদের জন্য একটি বিশ্বস্ত এবং নির্বিঘ্ন অভিজ্ঞতা তৈরি করে।
ইনকামিং লিঙ্কের জন্য ইনটেন্ট ফিল্টার যোগ করা
আপনার অ্যাপ কন্টেন্টের লিঙ্ক তৈরি করতে, একটি ইনটেন্ট ফিল্টার যোগ করুন যাতে আপনার ম্যানিফেস্টে এইসব এলিমেন্ট ও অ্যাট্রিবিউট ভ্যালু থাকে:
ACTION_VIEW ইনটেন্ট অ্যাকশন নির্দিষ্ট করুন যাতে Google Search থেকে ইনটেন্ট ফিল্টারে
পৌঁছানো যায়।
এক বা একাধিক <data> ট্যাগ যোগ করুন, যার প্রতিটি একটি URI ফর্ম্যাটকে উপস্থাপন করে যা
অ্যাক্টিভিটি সমাধান করে। <data> ট্যাগে কমপক্ষে
android:scheme অ্যাট্রিবিউট থাকতে হবে।
অ্যাক্টিভিটি যে ধরনের URI গ্রহণ করে তা আরও রিফাইন করতে আপনি আরও অ্যাট্রিবিউট যোগ করতে পারেন। যেমন, আপনার একাধিক অ্যাক্টিভিটি থাকতে পারে যা একই ধরনের URI গ্রহণ করে, কিন্তু যা পাথের উপর ভিত্তি করে আলাদা হয়। এই ক্ষেত্রে, android:path অ্যাট্রিবিউট বা এর pathPattern বা pathPrefix ভেরিয়েন্ট ব্যবহার করে
আলাদা আলাদা URI পাথের জন্য সিস্টেমের কোন অ্যাক্টিভিটি খোলা উচিত তা আলাদা করুন।
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> এলিমেন্ট অন্তর্ভুক্ত করা সম্ভব, তবে আপনার উদ্দেশ্য
অনন্য 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 Android রাউট করতে
পারবে।
ইনটেন্ট ফিল্টার নির্ধারণ করা সম্পর্কে আরও জানতে, অন্যান্য অ্যাপকে আপনার অ্যাক্টিভিটি শুরু করার অনুমতি দিন দেখুন।
ইনকামিং ইনটেন্ট থেকে ডেটা পড়ুন
সিস্টেম ইনটেন্ট ফিল্টারের মাধ্যমে আপনার অ্যাক্টিভিটি শুরু করলে, আপনাকে কী রেন্ডার করতে হবে তা নির্ধারণ করতে আপনি Intent-এর
প্রদান করা ডেটা ব্যবহার করতে পারবেন। ইনকামিং Intent-এর সাথে সম্পর্কিত ডেটা ও অ্যাকশন ফিরিয়ে আনতে
getData() ও getAction() মেথড কল করুন। অ্যাক্টিভিটির লাইফসাইকেলের যেকোনও সময়
আপনি এইসব মেথড কল করতে পারেন, তবে সাধারণত onCreate() বা onStart-এর মতো
প্রাথমিক কলব্যাকের সময় আপনার এটি করা উচিত।
Intent থেকে কীভাবে ডেটা ফিরিয়ে আনা যায় তা এই স্নিপেট থেকে জানতে পারবেন:
Kotlin
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();
}
ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে এইসব পেশাদার পদ্ধতি অনুসরণ করুন:
- ডিপ লিঙ্কের মাধ্যমে ব্যবহারকারীকে সরাসরি কন্টেন্টে নিয়ে যেতে হবে, কোনও প্রম্পট, ইন্টারস্টিশিয়াল পৃষ্ঠা বা লগ-ইন করার প্রয়োজন নেই। ব্যবহারকারী আগে কখনও অ্যাপ্লিকেশন না খুললেও, তিনি যাতে অ্যাপের কন্টেন্ট দেখতে পান তা নিশ্চিত করুন। পরবর্তী ইন্টার্যাকশনে বা লঞ্চার থেকে অ্যাপ খুললে ব্যবহারকারীকে প্রম্পট করা যেতে পারে।
- পিছনে ও উপরে নেভিগেট করা বিভাগে দেওয়া ডিজাইন সংক্রান্ত নির্দেশিকা অনুসরণ করুন যাতে ডিপ লিঙ্কের মাধ্যমে আপনার অ্যাপে প্রবেশ করার পরে ব্যবহারকারী ব্যাকওয়ার্ড নেভিগেশনের ক্ষেত্রে যা আশা করেন, আপনার অ্যাপ যেন সেই অনুযায়ী কাজ করে।
আপনার ডিপ লিঙ্ক পরীক্ষা করা
ডিপ লিঙ্কিংয়ের জন্য আপনি যে ইনটেন্ট ফিল্টার URI উল্লেখ করেছেন তা সঠিক অ্যাপ অ্যাক্টিভিটিতে রিজলভ হচ্ছে কিনা তা পরীক্ষা করতে, অ্যাক্টিভিটি ম্যানেজার (am) টুলের সাথে Android ডিবাগ ব্রিজ ব্যবহার করতে পারেন। আপনি কোনও ডিভাইস বা এমুলেটরের জন্য 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
Android 17 থেকে শুরু করে, সিস্টেম কীভাবে একটি URL সমাধান করে তা নির্ণয় করতে এবং মিলে যাওয়া ইনটেন্ট ফিল্টার বা
ডাইনামিক অ্যাপ লিঙ্ক নিয়মগুলি পরীক্ষা করতে আপনি am start-এর সাথে --debug-link ফ্ল্যাগও ব্যবহার করতে পারেন। আরও তথ্যের জন্য, debug-link ফ্ল্যাগ ব্যবহার করে লিঙ্ক রেজোলিউশন ডায়াগনসিস করা দেখুন।
আপনার সেট করা ম্যানিফেস্ট ডিক্লারেশন ও ইনটেন্ট হ্যান্ডলার, আপনার অ্যাপ ও ওয়েবসাইটের মধ্যে কানেকশন এবং ইনকামিং লিঙ্কের ক্ষেত্রে কী করতে হবে তা নির্ধারণ করে। তবে, সিস্টেম যাতে আপনার অ্যাপকে URI-এর সেটের জন্য ডিফল্ট হ্যান্ডলার হিসেবে বিবেচনা করে, তার জন্য আপনাকে সিস্টেমকে এই কানেকশন যাচাই করার অনুরোধও করতে হবে। অ্যাপ লিঙ্ক যাচাই করা নিবন্ধে এই যাচাইকরণ কীভাবে প্রয়োগ করতে হয় তা ব্যাখ্যা করা হয়েছে।
ইনটেন্ট ও অ্যাপ লিঙ্ক সম্পর্কে আরও জানতে, নিম্নলিখিত রিসোর্স দেখুন:
- ইনটেন্ট ও ইনটেন্ট ফিল্টার
- অন্যান্য অ্যাপকে আপনার অ্যাক্টিভিটি শুরু করার অনুমতি দিন
- Android Studio-এর সাথে Android অ্যাপ লিঙ্ক যোগ করা