Deep Link Yönlendirmesi Çalışmıyor: Flutter'da Navigation Sorunu Çözümü
Deep link çalışmıyorsa genellikle üç noktada sorun vardır: AndroidManifest.xml'de intent filter eksikliği, route tanımlaması hatalı veya test sırasında doğru URL kullanılmamış. Hepsini birlikte çözelim.
Android tarafında başla. AndroidManifest.xml dosyasına activity'nin içine intent filter eklemen gerekir. Bu, sistemin hangi URL'leri uygulamaya yönlendireceğini söyler.
1<activity2android:name=".MainActivity"3android:exported="true">4<intent-filter>5<action android:name="android.intent.action.VIEW" />6<category android:name="android.intent.category.DEFAULT" />7<category android:name="android.intent.category.BROWSABLE" />8<data9android:scheme="https"10android:host="example.com"11android:pathPrefix="/product" />12</intent-filter>13</activity>Bu örnek `https://example.com/product/123` şeklindeki URL'leri yakalar. Host ve pathPrefix'i kendi domain'ine göre düzenle.
Flutter tarafında main.dart'da navigasyonu ayarla. MaterialApp'e onGenerateRoute callback'i ekle ve gelen deep link'i parse et.
1void main() {2runApp(const MyApp());3}45class MyApp extends StatelessWidget {6const MyApp({Key? key}): super(key: key);79Widget build(BuildContext context) {10return MaterialApp(11home: const HomePage(),12onGenerateRoute: (settings) {13if (settings.name?.startsWith('/product/')?? false) {14final productId = settings.name!.split('/').last;15return MaterialPageRoute(16builder: (context) => ProductPage(id: productId),17);18}19return null;20},21);22}23}2425class ProductPage extends StatelessWidget {26final String id;27const ProductPage({required this.id});2830Widget build(BuildContext context) {31return Scaffold(32appBar: AppBar(title: Text('Ürün: $id')),33body: Center(child: Text('Ürün ID: $id')),34);35}Test etmek için adb komutunu kullan:
1adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/123" com.example.appBeklenen çıktı: Uygulama açılıp doğrudan ProductPage'e gider ve "Ürün ID: 123" gösterilir.
Sık yapılan hatalar: AndroidManifest.xml'de android:exported="true" unutmak (Android 12+ gerekli), URL scheme'i http yerine https olarak ayarlamak, pathPrefix'i eğik çizgiyle başlatmamak. Deep link test ederken emülatör kullanıyorsan internet bağlantısı kontrol et; gerçek cihazda daha güvenilir sonuç alırsın.
0 yorum