Ana içeriğe atla

Genel Bakış

Deep linking, bir kullanıcı bir bağlantıya dokunduğunda — e-posta, SMS, web sitesi, push bildirimi veya uygulama içi mesajdan — uygulamanızdaki belirli bir ekrana yönlendirir. Uygulama yüklü değilse, işletim sistemi kullanıcıları uygulama mağazasına veya yedek bir web sayfasına yönlendirebilir. Bu kılavuz şunları kapsar:
  • Deep link türleri ve her birinin ne zaman kullanılacağı
  • Android ve iOS için platform kurulumu
  • OneSignal SDK ile uygulamanızda deep link’lerin işlenmesi
  • Push, e-posta ve uygulama içi mesajlar için kanala özgü davranış
Genel URL ve bağlantı yapılandırması (Launch URL’ler, UTM parametreleri, dinamik URL’ler, bağlantı takibi) için bkz. URL’ler, bağlantılar ve deep link’ler.

Ön Koşullar

Deep link’leri kurmadan önce şunlara ihtiyacınız vardır:
  • Yapılandırılmış bir uygulamayla birlikte bir OneSignal hesabı
  • Mobil uygulamanızda yüklü OneSignal SDK
  • Universal Links veya App Links için HTTPS üzerinden barındırılan, kontrolünüzdeki bir alan adı
  • Uygulamanızın kaynak koduna ve derleme yapılandırmasına erişim (iOS için Xcode, Android için Android Studio)

Üç yaygın deep linking mekanizması vardır. Her biri, uygulamanın yüklü olup olmadığına bağlı olarak farklı davranış gösterir.
TürPlatformFormatUygulama yüklü değilse
Universal LinksiOS 9+https://yourdomain.com/pathURL’yi Safari’de açar
App LinksAndroid 6.0+https://yourdomain.com/pathURL’yi tarayıcıda açar
Özel URI şemalarıiOS ve Androidmyapp://pathSessizce başarısız olur veya hata gösterir
Öneri: En güvenilir deneyim için Universal Links (iOS) ve App Links (Android) kullanın. Bunlar standart https:// URL’leri kullanır, kanallar arası (push, e-posta, SMS) çalışır ve uygulama yüklü olmadığında yedek davranış sağlar. Özel URI şemaları (myapp://) kurulumu daha basittir, ancak yedek davranış sağlamaz ve tüm bağlamlarda çalışmayabilir (örneğin, e-posta istemcileri).
Universal Links ve App Links, alan adınızda bir doğrulama dosyasının barındırılmasını gerektirir. Bu dosya olmadan, işletim sistemi bağlantıyı normal bir web URL’si olarak ele alır.

Gerekli yapılandırmayı oluşturmak için Android Studio’nun App Links Assistant’ını kullanın.

Intent filtrelerini yapılandırma

Deep link’i işleyecek Activity’ye bir intent filtresi ekleyin:
<activity android:name=".DeepLinkActivity" android:exported="true">
  <intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" android:host="yourdomain.com" />
  </intent-filter>
</activity>

Gelen intent’i işleme

Intent appLinkIntent = getIntent();
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
assetlinks.json dosyasını Android Studio’nun App Links Assistant’ını kullanarak oluşturun ve şu adreste barındırın:
https://yourdomain.com/.well-known/assetlinks.json
Tam dosya formatı ve doğrulama adımları için Google’ın Verify App Links belgelerine bakın.
Apple Universal Links, kullanıcı eşleşen bir https:// URL’sine dokunduğunda uygulamanızı açar. Uygulamanın yüklü olduğunun garantili olduğu daha basit kullanım durumları için bunun yerine URL Schemes kullanabilirsiniz.

Associated Domains’i etkinleştirme

  1. Xcode’da hedefi seçin → Signing & CapabilitiesAssociated Domains ekleyin
  2. Alan adınızı ekleyin: applinks:yourdomain.com

Uygulamanızda Universal Link’i işleme

func application(_ application: UIApplication,
                 continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
        let url = userActivity.webpageURL else {
    return false
  }
  // Route to the correct screen based on the URL path
  return true
}

Apple App Site Association dosyasını barındırma

Bir apple-app-site-association (AASA) dosyası oluşturun ve şu adreste barındırın:
https://yourdomain.com/.well-known/apple-app-site-association
TEAMID yerine Apple Team ID’nizi, com.example.app yerine bundle identifier’ınızı yazın:
{
  "applinks": {
    "apps": [],
    "details": [{
      "appID": "TEAMID.com.example.app",
      "paths": ["/path/*", "/another-path"]
    }]
  }
}
Tam spesifikasyon için Apple’ın Supporting Associated Domains belgelerine bakın.

iOS Launch URL davranışı

OneSignal’ın iOS SDK’sı, Launch URL’yi (url özelliği) işlemek için openURL kullanır. Bu, bağlantının önce tarayıcıda açılmasına, ardından uygulamaya geri yönlendirilmesine neden olur — bu kullanıcı deneyimi açısından kötü olabilir. Bunu önlemek için şu yaklaşımlardan birini kullanın:
  1. API yükünde url yerine data kullanın ve deep link’i Push Bildirimi Tıklama Dinleyicisi’nde işleyin
  2. Info.plist’e OneSignal_suppress_launch_urls’i Boolean olarak YES değeriyle ekleyerek Launch URL’leri bastırın, ardından tüm gezinmeyi tıklama dinleyicisinde işleyin
İşletim sisteminin URL’yi çözmesine güvenmeden gezinme üzerinde tam kontrol sağladığı için 1. yaklaşım (data + tıklama dinleyicisi kullanımı) önerilir.

Deep link’leri OneSignal SDK ile işleme

OneSignal mesajlarından deep link’leri işlemenin en güvenilir yolu, işletim sistemi düzeyinde bağlantı çözümüne güvenmek yerine SDK’nın tıklama dinleyicilerini kullanmaktır. Bu, uygulamanızdaki gezinme üzerinde tam kontrol sağlar.

Push bildirimi tıklama dinleyicisi

Bildirim tıklamalarını yakalamak ve kullanıcıyı deep link URL’si veya ek verilere göre yönlendirmek için addClickListener kullanın:
OneSignal.Notifications.addClickListener { event ->
  val url = event.notification.launchURL
  val data = event.notification.additionalData
  // Route to the correct screen based on url or data
}
Java, Objective-C ve Cordova/Ionic dahil tam API referansı için bkz. addClickListener() Push.

Uygulama içi mesaj tıklama dinleyicisi

Uygulama içi mesaj butonlarından ve eylemlerinden deep link’leri işlemek için uygulama içi mesaj tıklama dinleyicisini kullanın:
OneSignal.InAppMessages.addClickListener { event ->
  val actionId = event.result.actionId
  // Route based on the action ID (your deep link URI)
}
Tam API referansı için bkz. addClickListener() In-App.

Push bildirimleri

Deep link’i iki yoldan biriyle ekleyin:
YöntemAPI özelliğiDavranış
Launch URLurl (veya yalnızca mobil için app_url)İşletim sistemi URL’yi doğrudan açar. iOS’ta, bastırılmadığı sürece önce tarayıcıyı açar.
Ek Veri (önerilen)dataURL tıklama dinleyicinize iletilir. Gezinmeyi tamamen siz kontrol edersiniz.

Platform davranışı

  • Android: App Links aracılığıyla eşleşen Activity’yi doğrudan açar
  • iOS: Safari’yi açar, ardından uygulamayı açar (Launch URL’leri bastırıp tıklama dinleyicisinde gezinmeyi işlemediğiniz sürece)
url, web_url ve app_url hedefleme hakkında ayrıntılar için bkz. URL’ler, bağlantılar ve deep link’ler.

E-postalar

Varsayılan olarak, OneSignal tıklama takibi için e-posta bağlantılarını yeniden yazar. Bu, URL’yi değiştirir ve işletim sistemi artık alan adını uygulamanızın İlişkili Alan Adı ile eşleşen bir alan olarak tanımadığından deep linking’i bozar.

E-postada deep link’leri etkinleştirme

Deep link’leri korumak için şu yöntemlerden birini kullanarak tıklama takibini devre dışı bırakın:
  • Dashboard: E-posta editöründe Track link clicks seçeneğinin işaretini kaldırın
  • API: disable_email_click_tracking: true ayarlayın
  • Bağlantı başına: Diğerleri için etkin tutarken tek tek bağlantılarda takibi devre dışı bırakmak için {{ 'https://yourdomain.com/path' | do_not_track_link }} Liquid filtresini kullanın
Track link clicks onay kutusu işaretlenmemiş OneSignal e-posta editörü
Tıklama takibini devre dışı bırakmak, E-posta Raporları’ndaki tıklama metriklerini kaybetmenize neden olur. Deep link içermeyen URL’lerde analitiği korumak için bağlantı başına takip dışlaması kullanmayı değerlendirin.
SenaryoSonuç
iOS + Safari + Universal Link + Takip devre dışıUygulamayı doğrudan açar
iOS + Safari + Universal Link + Takip etkinSafari’yi açar, uygulamayı açmayı sorar
iOS + Safari olmayan posta istemcisi + Universal LinkUygulama yüklü değilse App Store’u açar
Android + App Link + Takip devre dışıUygulamayı doğrudan açar
Android + App Link + Takip etkinÖnce tarayıcıyı, sonra uygulamayı açar

Uygulama içi mesajlar

Uygulama içi mesajlardaki deep link’ler tıklama dinleyicisi desenini kullanır. Mesaj editöründe özel bir eylem tanımlayıcısı belirler, ardından uygulama kodunuzda işlersiniz.

Sürükle ve bırak editörü

  1. Bir buton veya tıklanabilir öğe ekleyin
  2. Tıklama eylemini Custom Action ID olarak ayarlayın
  3. Deep link URI’nizi Action Name olarak girin (örneğin, https://yourdomain.com/promo veya myapp://promo)

HTML editörü

Özel HTML’den deep link’leri tetiklemek için Uygulama İçi JS Kütüphanesi’ndeki openUrl yöntemini kullanın.

Tıklamayı işleme

Eylemi yakalamak ve kullanıcıyı uygulamanızda yönlendirmek için uygulama içi mesaj tıklama dinleyicisini kullanın.

Deep link’leri test etme

Android

Bildirim göndermeden App Links’i test etmek için adb kullanın:
adb shell am start -a android.intent.action.VIEW \
  -d "https://yourdomain.com/path" \
  com.your.package
assetlinks.json dosyanızın erişilebilir olduğunu doğrulayın:
curl -I https://yourdomain.com/.well-known/assetlinks.json

iOS

AASA dosyanızı doğrulamak için Apple’ın İlişkili Alan Adları doğrulama aracını kullanın. Universal Link’leri aşağıdaki adımlarla da test edebilirsiniz:
  1. Bağlantıyı Notes uygulamasına yapıştırın
  2. “Uygulamada Aç” seçeneğinin göründüğünü onaylamak için bağlantıya uzun basın
  3. Uygulamanızın açıldığını doğrulamak için bağlantıya dokunun
Universal Links, doğrudan Safari adres çubuğuna yazıldığında çalışmaz — başka bir uygulamadan (Notes, Mail, Messages vb.) dokunulması gerekir.

OneSignal test mesajları

  1. OneSignal dashboard’dan Launch URL olarak veya Ek Veri içinde bir deep link URL’si ile test push’u gönderin
  2. Bildirimin uygulamanızdaki doğru ekranı açtığını doğrulayın
  3. URL veya verinin alındığını onaylamak için tıklama dinleyici günlüklerinizi kontrol edin

Sorun Giderme

iOS deep link’i uygulama yerine Safari’yi açıyor

Bu en yaygın sorundur. Olası nedenler:
  • AASA dosyası doğru barındırılmamışhttps://yourdomain.com/.well-known/apple-app-site-association adresinde Content-Type: application/json ile ve yönlendirme olmadan erişilebilir olduğunu doğrulayın
  • Associated Domains yapılandırılmamış — Xcode → Signing & Capabilities → Associated Domains’in applinks:yourdomain.com içerip içermediğini kontrol edin
  • Launch URL davranışı — OneSignal’ın iOS SDK’sı url özelliği için openURL kullanır, bu da tarayıcı öncelikli davranışı tetikler. Bunun yerine data + tıklama dinleyicisi kullanın veya Launch URL’leri bastırın
  • Safari’de test etme — Universal Links, Safari adres çubuğundan etkinleşmez. Notes, Mail veya başka bir uygulamadan test edin.

Android deep link’i tarayıcıyı açıyor

  • autoVerify eksik — Intent filtrenizin android:autoVerify="true" içerdiğinden emin olun
  • assetlinks.json bulunamıyor — Dosyanın https://yourdomain.com/.well-known/assetlinks.json adresinde olduğunu ve HTTP 200 döndürdüğünü doğrulayın
  • SHA256 parmak izi uyuşmazlığıassetlinks.json içindeki parmak izi, uygulamanızın imzalama sertifikasıyla eşleşmelidir. Hata ayıklama ve sürüm derlemeleri farklı sertifikalar kullanır.
E-posta tıklama takibi URL’leri yeniden yazar ve alan adı doğrulamasını bozar. Deep link içeren e-postalar için tıklama takibini devre dışı bırakın.
  • Tıklama dinleyicinizin uygulama yaşam döngüsünün başında kayıtlı olduğunu doğrulayın (örneğin, Application.onCreate() veya AppDelegate.didFinishLaunchingWithOptions içinde)
  • URL veya eylem kimliğinin yönlendirme mantığınızın beklediğiyle eşleştiğini kontrol edin
  • iOS’ta, Launch URL’leri bastırmadan url’ye güvenmediğinizi onaylayın — tarayıcı, dinleyiciniz tetiklenmeden önce bağlantıyı tüketebilir

SSS

Uygulama yüklü değilse ne olur?

Universal Links (iOS) ile URL, normal bir web sayfası olarak Safari’de açılır. App Links (Android) ile URL, varsayılan tarayıcıda açılır. Her iki durumda da, web sayfanızı uygun uygulama mağazasına yönlendirecek şekilde yapılandırabilirsiniz. Özel URI şemaları (myapp://), uygulama yüklü değilse sessizce başarısız olur veya hata gösterir.

Deep linking için Launch URL mi yoksa Ek Veri mi kullanmalıyım?

Ek Veri (data), tıklama dinleyicisi aracılığıyla gezinme üzerinde tam kontrol sağladığı için mobil deep link’ler için önerilir. Launch URL (url) daha basittir ancak iOS’ta sınırlamaları vardır (tarayıcı yönlendirmesi) ve özel yönlendirme mantığına izin vermez.

Deep link’leri kullanıcı verileriyle kişiselleştirebilir miyim?

Evet. Deep link URL’lerinize kullanıcı özellikleri, etiketler veya özel veriler eklemek için Liquid söz dizimiyle Dinamik URL’leri kullanın. Örneğin: https://yourdomain.com/profile/{{subscription.external_id}}. Evet. Özel şemanızı (örneğin, myapp://screen) Launch URL veya Ek Veri değeri olarak ayarlayın. Özel şemalar push ve uygulama içi mesajlar için iyi çalışır ancak e-posta istemcilerinde çalışmayabilir. Ayrıca uygulama yüklü değilse yedek davranış sağlamaz.

Deep link’ler OneSignal Journeys ile çalışır mı?

Evet. Bir Journey’de bir mesaj adımı yapılandırırken, Launch URL’yi veya Ek Veriyi deep link’inize ayarlayın. Davranış, bağımsız bir push veya uygulama içi mesajla aynıdır.