Cài đặt QR Code
Widget QR Code trên trang chủ VieLang IoT cho phép người dùng quét mã để tải app hoặc mở thẳng app nếu đã cài đặt (deep link).
Cách hoạt động
Người dùng quét QR
│
├── Nếu đã cài app → Mở app (deep link)
└── Nếu chưa cài → Chuyển đến Google Play / App Store
Cấu hình Android
Bước 1: Lấy SHA-256 fingerprint
Nếu app trên Google Play:
- Vào Google Play Console
- Chọn app → Release → Setup → App integrity
- Tab App signing → Copy SHA-256 certificate fingerprint
Nếu dùng local signing key:
keytool -list -v -keystore your-release-key.keystore -alias your-key-alias
# Copy dòng: SHA256: XX:XX:XX:...Bước 2: Cấu hình trong Mobile Center
- Mobile Center → Applications → Chọn app Android
- Field SHA-256 fingerprints → Paste fingerprint
- Field Google Play link → Link app trên Play Store
- Click Save
Cấu hình iOS
Bước 1: Lấy App Site Association ID
Format: {Team ID}.{Bundle ID}
- Team ID: Apple Developer Account → Membership → Team ID
- Bundle ID:
com.yourcompany.app(khớp với Bundle ID trong Xcode)
Ví dụ: A1B2C3D4E5.com.yourcompany.vielang
Bước 2: Cấu hình trong Mobile Center
- Mobile Center → Applications → Chọn app iOS
- Field App Site Association ID → Paste ID
- Field App Store link → Link app trên App Store
- Field App ID → Bundle ID của app
- Click Save
Thêm widget QR Code vào Dashboard
- Mở dashboard → Edit
- + Add widget → Tìm "Mobile app QR code"
- Widget tự động hiển thị QR code với:
- Redirect đến Play Store / App Store nếu chưa cài
- Deep link mở app nếu đã cài
Cấu hình trong Flutter App (v1.7.0+)
Từ phiên bản 1.7.0, cấu hình QR code được tải từ configs.json (không cần sửa code):
{
"thingsboardHost": "https://your-domain.com",
"appSecret": "YOUR_APP_SECRET",
"iosAppId": "com.yourcompany.app",
"androidPackageName": "com.yourcompany.app",
"androidSha256CertFingerprints": [
"AA:BB:CC:DD:EE:..."
]
}Cấu hình Android (AndroidManifest.xml)
Thêm intent-filter cho deep link:
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
<!-- Deep link intent filter -->
<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="your-domain.com"
android:pathPrefix="/mobile" />
</intent-filter>
</activity>Cấu hình iOS (Associated Domains)
- Xcode → Project → Signing & Capabilities
- + Capability → Associated Domains
- Thêm:
applinks:your-domain.com
Kiểm tra
# Test deep link Android
adb shell am start -a android.intent.action.VIEW \
-d "https://your-domain.com/mobile?token=XXX" \
com.yourcompany.app
# Test deep link iOS (Simulator)
xcrun simctl openurl booted "https://your-domain.com/mobile?token=XXX"