Skip to Content
📝

Диплинки требуют подписки Pro plan  или выше.

Это руководство поможет вам заменить Firebase Dynamic Links  на Revroute для создания диплинков, отслеживания кликов и маршрутизации между платформами.

Предварительные требования

Перед началом убедитесь, что вы выполнили руководство быстрого старта для настройки диплинков в Revroute, включая следующие шаги:

  1. Настройте домен диплинков в Revroute. Это заменяет домен Firebase *.page.link на ваш собственный брендированный домен диплинков.
  2. Создайте ваши диплинки в Revroute.
  3. Обработайте перенаправления диплинков в вашем приложении (подробности ниже).

Миграция Android-приложений

Удалите Firebase Dynamic Links SDK

Если у вас установлен Firebase Dynamic Links SDK, удалите его из файла build.gradle:

implementation 'com.google.firebase:firebase-dynamic-links:21.1.0'

Удалите все импорты Firebase из ваших Kotlin/Java файлов:

import com.google.firebase.dynamiclinks.FirebaseDynamicLinks import com.google.firebase.dynamiclinks.DynamicLink

Обновите AndroidManifest.xml

Если вы используете один и тот же домен для Firebase Dynamic Links и Revroute (например, yourapp.com), изменения не требуются — можете пропустить этот раздел.

Однако, если вы ранее использовали брендированный домен Firebase (например, yourapp.page.link), вам нужно заменить его на ваш пользовательский домен Revroute в конфигурации приложения.

<activity android:name=".MainActivity"> <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="yourapp.page.link" /> <!-- Replace with your Revroute deep link domain --> </intent-filter> </activity>

Реализуйте обработку диплинков

Переопределите onNewIntent в вашей основной activity для обработки открытий диплинков:

override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.data?.let { uri -> handleDeepLink(uri) } } private fun handleDeepLink(uri: Uri) { // Track the deep link open and get destination URL trackDeepLinkClick(uri.toString()) } private fun trackDeepLinkClick(deepLink: String) { val url = URL("https://api.dub.co/track/open") val connection = url.openConnection() as HttpURLConnection connection.requestMethod = "POST" connection.setRequestProperty("Content-Type", "application/json") connection.doOutput = true val body = JSONObject().apply { put("deepLink", deepLink) } connection.outputStream.use { os -> os.write(body.toString().toByteArray()) } val response = connection.inputStream.bufferedReader().use { it.readText() } val jsonResponse = JSONObject(response) val destinationUrl = jsonResponse.getString("url") runOnUiThread { navigateToDestination(destinationUrl) } }

Этот код выполняет следующее:

  • Извлекает домен и ключ из URL диплинка
  • Отправляет данные на эндпоинт /track/open
  • Получает финальный целевой URL
  • Выполняет навигацию к целевому URL в приложении

Миграция iOS-приложений

Удалите Firebase Dynamic Links SDK

Если у вас установлен Firebase Dynamic Links SDK, удалите его из Podfile:

pod 'Firebase/DynamicLinks'

Удалите все импорты Firebase, например:

import FirebaseDynamicLinks

Обновите Associated Domains

Если вы используете один и тот же домен для Firebase Dynamic Links и Revroute (например, yourapp.com), изменения не требуются — можете пропустить этот раздел.

Однако, если вы использовали брендированный домен Firebase (например, yourapp.page.link), вам нужно заменить его на ваш домен Revroute в настройках проекта iOS.

Чтобы включить Universal Links с Revroute, обновите Associated Domains в Xcode:

  1. Откройте ваш проект Xcode.
  2. Выберите таргет приложения → Signing & Capabilities
  3. В разделе Associated Domains замените старый домен Firebase на ваш домен Revroute:

Изменения в Info.plist приложения не требуются, если у вас не было других специфических для Firebase конфигураций диплинков.

import Foundation import UIKit func handleDubDeepLink(\_ url: URL) { let domain = url.host ?? "" let key = url.lastPathComponent let payload: [String: Any] = [ "domain": domain, "key": key, ] guard let requestURL = URL(string: "https://api.dub.co/track/open"), let httpBody = try? JSONSerialization.data(withJSONObject: payload) else { print("Invalid request setup") return } var request = URLRequest(url: requestURL) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = httpBody // Send the request URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Failed to track deep link: \(error)") return } guard let data = data, let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], let destination = json["url"] as? String else { print("Invalid response from /track/open") return } print("Resolved destination: \(destination)") DispatchQueue.main.async { // Navigate to the destination URL or handle it in-app navigateToScreen(from: destination) } }.resume() } func navigateToScreen(from url: String) { print("Navigating to in-app destination: \(url)") // Add your navigation logic here }

Этот код выполняет следующее:

  • Отправляет URL диплинка на эндпоинт /track/open
  • Получает финальный целевой URL
  • Выполняет навигацию к целевому URL в приложении
Last updated on