Navigasi Deep Link di React Native: Konfigurasi dan Handling Incoming URL

Lhuqita Fazry
Mobile Development React Native Deep Linking
Navigasi Deep Link di React Native: Konfigurasi dan Handling Incoming URL

Deep linking memungkinkan aplikasi mobile merespons URL eksternal dan membuka screen tertentu secara langsung. Fitur ini menjadi kebutuhan fundamental untuk aplikasi React Native modern, terutama ketika kita ingin mengarahkan user dari push notification, email verification, atau share link ke konten spesifik di dalam aplikasi. Tanpa deep link, user harus melakukan navigasi manual yang memperlambat conversion dan menurunkan engagement.

Mengenal Dua Mekanisme Deep Link di React Native

React Native mendukung dua pendekatan utama untuk deep linking: URL scheme dan Universal Link (iOS) / App Link (Android). URL scheme menggunakan custom protocol seperti myapp://product/123 dan bersifat universal di kedua platform. Universal Link dan App Link menggunakan domain HTTPS standar seperti https://www.example.com/product/123 dan memberikan keamanan lebih baik karena memerlukan verifikasi domain.

URL scheme lebih mudah diimplementasikan dalam fase development karena tidak memerlukan konfigurasi server. Namun pendekatan ini memiliki kelemahan: jika aplikasi belum terinstall, URL scheme tidak dapat di-handle oleh browser dan user akan mendapatkan error page. Universal Link dan App Link mengatasi masalah ini dengan fallback ke website ketika aplikasi tidak tersedia di device.

Konfigurasi Deep Link untuk Android dan iOS

Konfigurasi URL scheme dimulai dengan mendefinisikan scheme di file konfigurasi native. Di Android, tambahkan <intent-filter> di AndroidManifest.xml dengan action VIEW, category BROWSABLE, dan data scheme yang kita definisikan. Di iOS, daftarkan URL scheme di Info.plist melalui key CFBundleURLTypes.

Untuk Universal Link di iOS, kita perlu menambahkan capability Associated Domains di Xcode dan mengupload file apple-app-site-association ke root domain server. File JSON ini memetakan path URL ke bundle identifier aplikasi. Android App Link memerlukan konfigurasi serupa dengan file assetlinks.json yang diverifikasi oleh Google Play Services.

Proses verifikasi domain untuk Universal Link dan App Link memang memerlukan effort tambahan. Namun hasilnya sepadan: user experience menjadi seamless dan link dapat di-share di platform mana pun tanpa khawatir akan error.

Handling Incoming URL dengan Linking API

API Development with Golang
Web App • Beginner

API Development with Golang

A hands-on, project-based course designed to teach beginners how to build robust...

Daftar

React Native menyediakan module Linking yang dapat mendeteksi URL masuk baik saat aplikasi cold start maupun saat berjalan di background. API ini menjadi fondasi untuk semua implementasi deep link sebelum kita integrasikan dengan library navigasi.

Berikut contoh implementasi handler sederhana menggunakan Linking:

javascriptjavascript
import { useEffect } from 'react';
import { Linking } from 'react-native';

const useDeepLinkHandler = () => {
  useEffect(() => {
    // Handle URL saat aplikasi sudah berjalan
    const subscription = Linking.addEventListener('url', handleDeepLink);

    // Handle URL saat aplikasi di-open dari cold start
    Linking.getInitialURL().then((url) => {
      if (url) {
        handleDeepLink({ url });
      }
    });

    return () => subscription.remove();
  }, []);

  const handleDeepLink = (event) => {
    const { url } = event;
    const route = parseDeepLink(url);
    // Navigasi ke screen berdasarkan route
    console.log('Incoming deep link:', route);
  };

  const parseDeepLink = (url) => {
    // Parsing logic untuk ekstrak path dan parameter
    const path = url.replace('myapp://', '');
    return path;
  };
};

Logic di atas menggunakan pattern subscription untuk listen event real-time dan getInitialURL() untuk catch URL yang membuka aplikasi dari terminated state. Pattern ini memastikan tidak ada incoming URL yang terlewat regardless dari lifecycle state aplikasi.

Integrasi Deep Link dengan React Navigation

Library React Navigation menyediakan abstraction yang lebih tinggi untuk deep linking melalui prop linking di NavigationContainer. Dengan konfigurasi ini, kita tidak perlu menulis parser manual untuk setiap route.

Konfigurasi linking memetakan path URL ke screen name dan parameter. React Navigation secara otomatis menghandle parsing, validation, dan navigasi ke screen target. Berikut struktur konfigurasi yang umum digunakan:

javascriptjavascript
import { NavigationContainer } from '@react-navigation/native';

const linking = {
  prefixes: ['myapp://', 'https://example.com'],
  config: {
    screens: {
      Home: '',
      ProductDetail: 'product/:id',
      Profile: 'user/:userId',
    },
  },
};

function App() {
  return (
    <NavigationContainer linking={linking}>
      {/* Stack Navigator */}
    </NavigationContainer>
  );
}

Dengan konfigurasi di atas, URL myapp://product/42 akan secara otomatis membuka screen ProductDetail dengan parameter id bernilai 42. React Navigation juga mendukung nested navigator, sehingga kita dapat mendefinisikan deep link path yang kompleks untuk tab atau drawer navigation.

Best Practices untuk Handling Deep Link di Production

Beberapa prinsip penting perlu diperhatikan ketika mengimplementasikan deep link di production environment. Pertama, selalu validasi parameter yang diterima dari URL sebelum digunakan untuk fetch data atau navigasi. Invalid parameter dapat menyebabkan crash atau exposure data yang tidak semestinya.

Kedua, implementasikan analytics tracking untuk setiap deep link event. Data ini memberikan insight tentang channel marketing mana yang paling efektif dalam mengarahkan traffic ke aplikasi. Ketiga, gunakan fallback mechanism yang graceful ketika target screen memerlukan authentication. Alih-alih menampilkan error, arahkan user ke login screen dan redirect kembali setelah proses autentikasi selesai.

Keempat, test deep link secara menyeluruh di device fisik untuk kedua platform. Simulator dan emulator sering kali tidak mereplikasi behavior intent dan Universal Link dengan akurat. Testing harus mencakup cold start, background, dan foreground states untuk memastikan consistency.

Deep linking yang terimplementasi dengan baik akan meningkatkan retention dan user satisfaction secara signifikan. Fitur ini menjembatani gap antara ekosistem web dan mobile, memberikan experience yang unified bagi user.

Mau menguasai React Native dan teknik navigasi modern secara mendalam? Bergabunglah dengan Mobile Development Bootcamp di Rumah Coding. Kurikulum praktis dengan proyek real-world mencakup React Native, deep linking, push notification, dan integrasi backend.

Course Terkait

EduTrack: Learning Management & Assessment API
Premium Course Web App

API Development with Golang

A hands-on, project-based course designed to teach beginners how to build robust, high-performance RESTful APIs using Golang. Starting from core Go syntax and concurrency, students will progress through routing, database integration, security, and finally containerize their application for production deployment.

Capstone Project

EduTrack: Learning Management & Assessment API

  • Role-Based Access Control (RBAC)
  • Course & Module Management
  • Enrollment & Progress Tracking
7 Weeks Beginner
Lihat Detail Course
Asynchronous Bulk E-Certificate & Notification Engine
Premium Course Web App

Advanced Architecture with Laravel Containers & Queues

A problem-driven, project-based course designed to elevate intermediate developers to a senior architectural mindset. Instead of just memorizing documentation, students will tackle real-world bottleneck issues by mastering the Inversion of Control (IoC) principle, Dependency Injection, and asynchronous background processing. Learn to decouple services and orchestrate robust queues to build scalable, high-performance applications that never freeze under heavy loads.

Capstone Project

Asynchronous Bulk E-Certificate & Notification Engine

  • Decoupled Service Architecture: PDF generation and Email delivery are built as independent, interface-driven services injected via the Service Container.
  • Job Chaining: Ensuring processes run in strict asynchronous order (Generate PDF ➔ Upload to Storage ➔ Send Email).
  • Job Batching & Real-Time Tracking: Grouping hundreds of jobs together and displaying a live progress bar (e.g., "65% Completed") on the admin dashboard.
7 Weeks Intermediate
Lihat Detail Course
TaskSync: Real-Time Collaborative Task Manager
Premium Course Mobile App

Advanced Flutter State Management with BLoC

Master advanced Flutter state management by building a production-ready application. This intermediate course uses a top-down, problem-driven approach, plunging you into real-world engineering challenges. You will learn to architect scalable applications, handle complex reactive states, manage multi-BLoC communication, synchronize real-time data, and implement optimistic UI updates using industry-standard BLoC patterns.

Capstone Project

TaskSync: Real-Time Collaborative Task Manager

  • Role-Based Authentication: Secure login and session management, dynamically reflecting user states across the entire application.
  • Real-Time Task Board: A Kanban-style board that instantly updates across all devices when any team member creates, moves, or deletes a task.
  • Advanced Search & Filtering: High-performance local search with event debouncing to prevent unnecessary API calls.
7 Weeks Intermediate
Lihat Detail Course

Artikel Terkait