Cài đặt QR Code

Cấu hình QR code deep link để người dùng quét mã tải và mở VieLang Mobile.

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:

  1. Vào Google Play Console
  2. Chọn app → ReleaseSetupApp integrity
  3. 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

  1. Mobile CenterApplications → Chọn app Android
  2. Field SHA-256 fingerprints → Paste fingerprint
  3. Field Google Play link → Link app trên Play Store
  4. 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

  1. Mobile CenterApplications → Chọn app iOS
  2. Field App Site Association ID → Paste ID
  3. Field App Store link → Link app trên App Store
  4. Field App ID → Bundle ID của app
  5. Click Save

Thêm widget QR Code vào Dashboard

  1. Mở dashboard → Edit
  2. + Add widget → Tìm "Mobile app QR code"
  3. 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)

  1. Xcode → Project → Signing & Capabilities
  2. + CapabilityAssociated Domains
  3. 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"