Android DeepLink Kullanımı ( Linkten Uygulama Açma )

Merhaba Arkadaşlar,
Bugün dersimizde sizlere DeepLink Kullanımı ( Linkten Uygulama Açma ) işleminden bahsedeceğim. Deep Link nedir ne işe yarar kısaca açıklayalım; örneğin mailinize gelen url e tıklıyorsunuz yada telefonunuzun browserından bir url yazıp giriş yapmaya çalıştığınızda android uygulamanızın açılmasını istiyorsanız deep link kullanmanız gerekecektir. Bir diğer örnek ise; alışveriş uygulamasında kullanıcının aradığı ürün ile ilgili detaylı sayfaya ulaşmak istediğinde deep link kullanmak hem uygulamanın daha kullanışlı ve efektif olmasını sağlayacaktır.

Öncelikle detaylı bilgi için bu linki inceleyebilirsiniz. ( https://developer.android.com/training/app-indexing/deep-linking.html )

Linkten Uygulama Açma

Deep Linki aktif hale getirmek için yapmamız gereken adımlar şunlar ; AndroidManifest.xml dosyamız aşağıdaki gibi olmalıdır. Kodları incelersek eğer;  <intent-filter> tagını kullanarak belirli android:host, android:pathPrefix ve android:scheme tanımladığımı göreceksiniz. <intent-filter> amacı diğer uygulamaların bizim activity imizi başlatmasını sağlamaktır. Bizde belirli bir url linki girdiğimizde veya tıkladığımızda uygulamamızın LinkReceiverActivity sayfasına gidip oradan da duruma göre ilgili activitysi hangisi ise ona yönlenmesini istiyoruz. <activity> tagleri içinde hangi activity tetiklenmesini istiyorsak onun adını yazıyoruz.

Aşağıdaki AndroidManifest.xml sınıfını incelediğimizde data tagleri içinde yer alan host (*mobilhanem) pathPrefix (takim) ve scheme (http veya https ) uzantıları bulunmaktadır. Böylece kullanıcı url ye örneğin https://mobilhanem.com/takim/Galatsaray yazdığında ilgili sayfa kullanıcının karşısına gelecektir. Bu dersimizde üç activity için örneklendirme yaptık. Galatasaray, Besiktas ve Orduspor için ilgili activityler tanımladık. android:host kısmında kullandığımız  ‘*’ anlamı ise uzantısı ne olursa olsun bütün hepsini kapsayıp mobilhanem yönlendirmesini yapabilsin diye *mobilhanem şeklinde yazdık.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mobilhanem.deeplinkandroidexample">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".GalatasarayAct" />
        <activity android:name=".BesiktasAct" />
        <activity android:name=".OrdusporAct" />
        <activity android:name=".LinkReceiverActivity"
            android:launchMode="singleInstance"
            android:screenOrientation="nosensor"
            android:theme="@android:style/Theme.NoDisplay">

            <intent-filter
                android:autoVerify="true"
                android:label="@string/app_name">
                <action android:name="android.intent.action.VIEW" />

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

                <data
                    android:host="*mobilhanem.com"
                    android:pathPrefix="/takim/"
                    android:scheme="http" />
                <data
                    android:host="*mobilhanem.com"
                    android:path="/takim/"
                    android:scheme="https" />
            </intent-filter>

        </activity>
    </application>

</manifest>

Yukarıda belirtiğim gibi yönlenmesini istediğimiz activity sınıfımızın kodlarıda aşağıdadır. İstediğimiz yönlendirme başarılı olduğunda aşağıdaki kod satırları çalışacaktır. Uygulamanın kaynak kodlarını indirip çalıştırdığınızda debug yapmanızı öneririm direk olarak intente eriştikten sonra gelen cevabı alıyoruz. Gelen cevabıda ayrıştırıp takim pathPrefixinden sonra gelen değere göre ilgili activitylere yönlendiriyoruz.

LinkReceiverActivity.java

package com.mobilhanem.deeplinkandroidexample;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class LinkReceiverActivity extends Activity {

    private static String GALATASARAY = "Galatasaray";
    private static String BESIKTAS = "Besiktas";
    private static String ORDUSPOR = "Orduspor";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        finish();

        Intent intent = getIntent();

        // mobilhanem.com/takim/ dan sonra gelecek olan değeri parse edip hangi activity ile ilişkili ise onu açtırıyoruz.

        String intentData = intent.getDataString();
        if (intentData != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
            String param= intentData.substring(intentData.lastIndexOf("/") + 1);
            Intent i = null;
            if (GALATASARAY.equals(param)){
                i = new Intent(this,GalatasarayAct.class);
            }else if(BESIKTAS.equals(param)){
                i = new Intent(this,BesiktasAct.class);
            }else if(ORDUSPOR.equals(param)) {
                i = new Intent(this,OrdusporAct.class);
            }
            startActivity(i);
        }
    }
}

Şimdi gelelim yazdığımız kodları nasıl test edeceğimize terminal de bazı kodları tetiklememiz gerekiyor eğer mac kullanıyorsanız şu işlemleri sırasıyla yapınız:

export PATH=/Users/alper/Library/Android/sdk/platform-tools:/Users/alper/Library/Android/sdk/tools:$PATH
adb shell am start -W -a android.intent.action.VIEW -d https://www.mobilhanem.com

Eğer windows kullanıyorsanız şu işlemleri sırasıyla yapınız:

C:\Program Files (x86)\Android\android-sdk\platform-tools>adb shell am start
C:\Program Files (x86)\Android\android-sdk\platform-tools>adb shell am start -W -a android.intent.action.VIEW -d https://www.mobilhanem.com

Not: Burada önemli olan sdk pathini nereye gösterdiğinizdir eğer sizdeki path yolu ile burada yazdığım yol aynı değilse zaten yönlendirme işlemi başarısız olacaktır. 

Not: Ben GenyMotion kullanarak bu dersi hazırladım siz uygulamanızı gerçek cihazda da deneyebilirsiniz. Ayrıca GenyMotion kullanırken path belirtme ile ilgili bir sorun ile karşılaşırsanız muhtemelen sdk yolunu gösterme ile ilgili olacaktır. Aşağıdaki resimde gördüğünüz gibi GenyMotion->Settings->ADB den Use custom Android SDK tools işaretleyip ilgili sdk pathini alana yazıyoruz. 

GenyMotion kurulumu için bu dersimizi inceleyebilirsiniz.

Bu işlemleride tamamladıktan sonra isterseniz cihazınızın browserindan ilgili url i yazıp denersiniz isterseniz mail adresinizden url e tıklayarak ilgili uygulamayı açtırabilirsiniz. Buradaki kodların nasıl çalıştığını daha iyi kavramak için dersimizdeki video yu izlemeniz ve kaynak kodları indirmeniz faydalı olacaktır. Aşağıdaki ekran görüntüsünde ilgili url yi browsera yazıp açmaya çalıştığımızda gördüğünüz gibi bize işletim sistemi soruyor uygulamayı mı açmak istiyorsunuz yoksa browserdan mı devam edeceksiniz. DeepLink Kullanımı ( Linkten Uygulama Açma ) kullanmak işte bu kadar kolay hangi şekilde yönlendirme yapacağınız size kalmış dediğim gibi dilerseniz direk uygulamayı açtırırsınız dilerseniz uygulama içindeki herhangi bir activityi açtırırsınız.

 

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Mobilhanem.com üzerinden anlattığımız mobil uygulama geliştirme derslerine devam edeceğiz. Konu hakkında sorunuzu yorum alanından sorabilirsiniz. Konu dışı sorularınızı ve tüm yazılımsal sorularınızı sorucevap.mobilhanem.com sitemizden de sorabilirsiniz.

Bir dahaki dersimizde görüşmek dileğiyle..

14

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

2 Yorum

  • anlatımınız için teşekkürler. bunun bir farklı versiyonu yani CALL ile veya OUTGOING_CALL ile uygulama açmayı nasıl yapabiliriz. mesela telefon ile 3456# veya başka bişey tuşlandığında uygulama çalıştırma nasıl olabilir? örnek bir uygulama yayınlarsanız sevinirim

  • Bu linke Tıklandığında Sms Uygulamamsını Açıp bir numaraya otamatik olarak Sms Göndermesini İstiyorum veya Sms Uygulamasını Açıp Gönderilecek gönderilecek hazır şekilde Açılmasını istiyorum Öyle bir şey mümkünmü Veya nasıl yapabilirim

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?