شرح مفهوم الـ Deep Linking في أندرويد

نتعرف في هذا المقال عن مفهوم الـ Deep linking والذي يمكننا من إنشاء روابط ينقل المستخدم إلى محتوى معين داخل التطبيق

Mohammad Al-Aliمنذ 4 سنوات

بسم الله الرحمن الرحيم

 

في هذا المقال، سنتعرف على كيفية إنشاء روابط تنقل المستخدمين إلى محتوى معين داخل تطبيق أندرويد، يسمى هذا المفهوم بـ Deep Linking. والأمثلة عليه كثير، حيث أنه يعتبر مفهوم مهم جداً سهل حياة مستخدمي الهواتف الذكية بشكل كبير، فمثلاً، تستطيع مشاركة رابط لتغريدة مع أصدقائك وعندما يضغطون على الرابط، سينقلهم مباشرة لتطبيق تويتر إن كان مثبتاً على أجهزتهم، وأيضاً يمكنك مشاركة رابط للإنضمام في مجموعتك على تليجرام أو واتساب.. وغيرها الكثير...

 

عندما يضغط المستخدم على رابط، يقوم نظام الأندرويد بمحاولة كل من الخيارات التالية بالترتيب حتى ينجح أحد الخيارات:

1- يقوم بفتح التطبيق الذي حدده المستخدم كـ تطبيق لفتح الرابط بشكل دائم

2- يقوم بفتح التطبيق الوحيد الذي يمكنه فتح الرابط.

3- يعرض نافذة بالتطبيقات التي يمكنها فتح الرابط ليختار من بينها المستخدم.

 

 

سنقوم بتطبيق المفهوم على تطبيق تجريبي، لنفترض أن لدينا مدونة ولها تطبيق على الأندرويد، ونريد أن نتيح للمستخدمين قراءة المقالات ومشاركتها من خلال التطبيق. لنفترض أن رابط المدونة هو my-aweseome-blog.com ولنفرض أن رابط المقال سيكون my-awesome-blog.com/article/123 حيث أن 123 هو الـ id للمقال.

 

هيا لنبدأ:

في البداية، علينا أن نحدد ما هي الـ Activity التي ستعرض محتوى المقال عند الضغط على الرابط، بعدها نذهب إلى ملف الـ AndroidManifest، إلى مكان تعريف الـ Activity تحديداً.

نضيف الـ ACTION_VIEW كـ Action لنجعل الـ Activity قابلة للوصول من خلال نتائج بحث Google. فنضيف السطر التالي داخل الـ Intent Filter للـ Activiity:

<action android:name="android.intent.action.VIEW" />

لكي نعلم نظام التشغيل أن هذه الـ Activity يمكن أن تفتح دون تحديد اسمها -عن طريق Implicit Intent-، علينا إضافة android.intent.category.DEFAULT كـ category داخل الـ Intent Filter الخاص بها.

أيضاً يجب علينا إضافة الـ  android.intent.category.BROWSABLE لجعل الـ Activity قابلة للوصول من قبل المتصفح. فنضيف السطرين التاليين للـ Intent Filter:

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

 

وأخيراً سنستخدم وسم <data> لتحديد الرابط الذي سيتم فتح الـ Activity من خلاله، فـ نحدد Domain باستخدام الخاصية host ونحدد البروتوكول من خلال خاصية scheme، ولنحدد المسار الخاص بهذه الـ Activity نستخدم الخاصية pathPrefix، فينتج عنه السطر التالي:

<data android:scheme="http"
              android:host="www.my-awesome-blog.com"
              android:pathPrefix="/article" />

وإذا كانت مدونتنا لديها SSL Certificate -أي أن الرابط يمكن أن يبدأ بـ https- يمكننا تكرار السطر السابق مع وضع https بدلاً عن http، ليصبح الـ tag الخاص بالـ Actitivy كالتالي:

        <activity
            android:name="ShowArticleActivity">
            
            <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="http"
                    android:host="www.my-awesome-blog.com"
                    android:pathPrefix="/article" />
                <data android:scheme="https"
                    android:host="www.my-awesome-blog.com"
                    android:pathPrefix="/article" />
                
            </intent-filter>

        </activity>

 

 

الآن أصبح كل شيء جاهز لفتح الـ Activity عند الضغط على الرابط، وسيتم إرسال الرابط في الـ Intent الذي سيفتح الـ Activity. لذلك يمكنن الوصول للرابط من خلال استدعاء getIntent() في دالة الـ onCreate التابعة للـ ShowArticleActivity.

package com.malalisy.myawesomeblog;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

public class ShowArticleActivity extends AppCompatActivity {

    private String TAG = "ShowArticleActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_article);

        Uri data = getIntent().getData();

        if (data != null) { // The activity was opened by a link
            Log.d(TAG, data.toString());

            int articleId = 0;

            try {
                articleId = Integer.parseInt(data.getLastPathSegment());
            } catch (NumberFormatException e) {
                Toast.makeText(this, "Invalid URL", Toast.LENGTH_LONG).show();
                finish();
            }

            Log.d(TAG, articleId + "");
            
            // Get the article with the id = articleId ..

        }
        
    }

}

 

 

والآن، إن قمنا بفتح رابط http://www.my-awesome-blog.com/article/1636، سيظهر لنا أندرويد خيارات الفتح:

 

 

 

وسيظهر لنا في الـ Logcat البيانات التي قمنا بطباعتها:

 

 

 

أما إذا قمنا بفتح رابط غير صالح، ستظهر لنا الرسالة:

 

كلمات دليلية: android deep linking
3
إعجاب
3570
مشاهدات
1
مشاركة
3
متابع

التعليقات (1)

sweilemj:

بارك الله فيك , وهنا تقدر تعملها بطريقة بسيطه جدا للي مو عارف كيف يطبقها ...

https://developer.android.com/studio/write/app-link-indexing.html

 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !