- Add QR code toggle for HTTPS/Custom Scheme links - Add Universal Links (iOS) and App Links (Android) support - Create deep link route handler with platform detection - Add .well-known files for domain verification - Fix Content-Type headers for apple-app-site-association - Add environment configuration for staging & production - Add comprehensive testing documentation Testing: - QR scan → Safari → App switch working ✅ - Platform detection working ✅ - Auto redirect to custom scheme working ✅ - Web fallback JSON response working ✅ ### No Issue
6.4 KiB
6.4 KiB
QR Code Testing Guide - HIPMI Mobile
📋 Overview
Dokumentasi ini menjelaskan cara testing QR Code untuk Universal Links (iOS) dan App Links (Android) pada fitur Event Confirmation.
🔧 Update Terbaru
File screens/Admin/Event/EventDetailQRCode.tsx telah diupdate dengan fitur:
- Toggle Button: Switch antara HTTPS link dan Custom Scheme link
- HTTPS Link: Untuk testing Universal Links/App Links dengan domain staging
- Custom Scheme: Untuk testing langsung tanpa domain verification
🎯 Cara Testing QR Code
Opsi 1: HTTPS Link (Recommended untuk Production)
Gunakan tombol "HTTPS" di component QR Code.
Link yang di-generate:
https://cld-dkr-staging-hipmi.wibudev.com/event/{id}/confirmation?userId={userId}
Cara kerja:
- User scan QR code dengan kamera
- Safari/Chrome terbuka dengan URL HTTPS
- iOS/Android mendeteksi domain terverifikasi
- App terbuka otomatis dan menuju halaman confirmation
Prerequisites:
- ✅ File
apple-app-site-associationharus accessible di Next.js server - ✅ File
assetlinks.jsonharus accessible di Next.js server - ✅ Domain harus terverifikasi di app.config.js
- ✅ App harus di-build ulang setelah perubahan domain
Testing Steps:
# 1. Pastikan .well-known files accessible
curl https://cld-dkr-staging-hipmi.wibudev.com/.well-known/apple-app-site-association
curl https://cld-dkr-staging-hipmi.wibudev.com/.well-known/assetlinks.json
# 2. Rebuild app
bunx expo prebuild --clean
# 3. Run di physical device (bukan simulator)
bun run android # untuk Android
bun run ios # untuk iOS
Opsi 2: Custom Scheme Link (Untuk Development/Testing Cepat)
Gunakan tombol "Custom Scheme" di component QR Code.
Link yang di-generate:
hipmimobile://event/{id}/confirmation?userId={userId}
Cara kerja:
- User scan QR code dengan kamera
- iOS: Pilih "Open in HIPMI Badung Connect"
- Android: Langsung buka app
- App terbuka dan menuju halaman confirmation
Keuntungan:
- ✅ Tidak butuh domain verification
- ✅ Bisa testing langsung tanpa rebuild
- ✅ Cocok untuk development
Kekurangan:
- ❌ Tidak bisa dibuka dari web browser
- ❌ Tidak support universal linking dari website lain
📱 Testing Checklist
iOS (Universal Links)
- File
apple-app-site-associationvalid dan accessible - Domain terdaftar di
app.config.js→ios.associatedDomains - Bundle ID match dengan konfigurasi
- Team ID benar di apple-app-site-association
- Test dengan physical device (simulator tidak support)
- Test dengan Safari (bukan Chrome)
- Long press link → ada opsi "Open"
Debug iOS:
# Cek apple-app-site-association
curl -I https://cld-dkr-staging-hipmi.wibudev.com/.well-known/apple-app-site-association
# Harus return:
# Content-Type: application/json
# HTTP/2 200
Android (App Links)
- File
assetlinks.jsonvalid dan accessible - SHA256 fingerprint benar
- Package name match
- Intent filters terdaftar di app.config.js
- Test dengan physical device
- Test dengan Chrome
Debug Android:
# Dapatkan SHA256 fingerprint
cd android
./gradlew signingReport
# Cek assetlinks.json
curl https://cld-dkr-staging-hipmi.wibudev.com/.well-known/assetlinks.json
🐛 Troubleshooting
Problem: QR Scan Terbuka di Safari, Tidak Balik ke App
Penyebab:
- Domain belum terverifikasi untuk Universal Links/App Links
- File
.well-knowntidak accessible atau invalid - App belum di-rebuild setelah perubahan domain
Solusi:
-
Pastikan file
.well-knownaccessible:curl https://cld-dkr-staging-hipmi.wibudev.com/.well-known/apple-app-site-association -
Rebuild app:
bunx expo prebuild --clean bun run android # atau bun run ios -
Gunakan Custom Scheme untuk testing cepat
Problem: Link Tidak Membuka App Sama Sekali
Cek:
- App sudah terinstall di device
- Link format benar (hipmimobile:// atau https://)
- Route handler sudah ada di app folder
Test manual:
# iOS Simulator
xcrun simctl openurl booted "hipmimobile://event/123/confirmation?userId=456"
# Android Emulator
adb shell am start -W -a android.intent.action.VIEW \
-d "hipmimobile://event/123/confirmation?userId=456" \
com.bip.hipmimobileapp
Problem: "Cannot GET /event/..." di Next.js
Penyebab:
Route /event/[id]/confirmation tidak ada di Next.js server
Solusi: Pastikan Next.js project punya file:
public/.well-known/apple-app-site-association
public/.well-known/assetlinks.json
Dan API route untuk handle:
pages/api/event/[id]/confirmation.ts
📄 File Configuration
app.config.js - iOS
ios: {
associatedDomains: ["applinks:cld-dkr-staging-hipmi.wibudev.com"],
}
app.config.js - Android
android: {
intentFilters: [
{
action: "VIEW",
autoVerify: true,
data: [
{
scheme: "https",
host: "cld-dkr-staging-hipmi.wibudev.com",
pathPrefix: "/",
},
],
category: ["BROWSABLE", "DEFAULT"],
},
],
}
apple-app-site-association (Next.js)
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAM_ID.com.anonymous.hipmi-mobile",
"paths": ["/event/*/confirmation"]
}
]
}
}
assetlinks.json (Next.js)
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.bip.hipmimobileapp",
"sha256_cert_fingerprints": ["YOUR_SHA256_FINGERPRINT"]
}
}
]
🎓 Best Practices
- Development: Gunakan Custom Scheme untuk testing cepat
- Staging: Gunakan HTTPS link dengan domain staging
- Production: Gunakan HTTPS link dengan domain production
- Testing: Selalu test di physical device, bukan simulator
- Debugging: Enable logging di confirmation page untuk track deep link
🔗 Related Files
screens/Admin/Event/EventDetailQRCode.tsx- QR Code generatorapp/(application)/(user)/event/[id]/confirmation.tsx- Confirmation pageapp.config.js- App configurationservice/api-config.ts- API configuration (DEEP_LINK_URL)
📞 Support
Jika masih ada masalah:
- Cek logs di console
- Test manual dengan adb/xcrun
- Verify .well-known files dengan curl
- Pastikan app rebuild setelah perubahan config