Mengapakah ketidakpadanan ID bundle memutuskan Pautan Universal iOS? Ketidakpadanan ID Bundle memutuskan Pautan Universal apabila Pengecam Aplikasi yang ditandatangani oleh aplikasi tidak sepadan dengan kemasukan appID/appIDs AASA yang sepadan untuk domain yang dikaitkan, menyebabkan pengesahan domain yang dikaitkan gagal.
ID Bundle (CFBundleIdentifier) ialah rentetan unik yang mengenal pasti aplikasi iOS individu dalam ekosistem Apple. Dalam seni bina Pautan Universal, ID Bundle digabungkan dengan Prefiks Pengecam Aplikasi untuk membentuk Pengecam Aplikasi, yang disahkan oleh sistem pengendalian berbanding fail apple-app-site-association yang dihoskan untuk memberi kebenaran pengendalian URL asli.
| Terma | Definisi |
|---|---|
| ID Bundle | Pengecam DNS terbalik unik yang ditetapkan kepada sasaran aplikasi iOS dalam Xcode (CFBundleIdentifier). |
| Prefiks Pengecam Aplikasi | Prefiks ID App yang ditetapkan dalam tetapan akaun Pembangun Apple (selalunya, tetapi tidak semestinya, sama dengan ID Pasukan). |
| Pautan Universal | Mekanisme standard Apple untuk menghala URL HTTPS web terus kepada paparan aplikasi asli. |
| Domain Berkaitan | Hak kelayakan Xcode yang mengisytiharkan domain web yang dibenarkan untuk dikendalikan oleh apl (applinks:). |
| Fail AASA | Fail JSON (apple-app-site-association) yang dihoskan pada domain untuk memberi kebenaran pengendalian URL apl. |
Rantaian Diagnostik Kanun
Rajah di bawah menggambarkan urutan pengesahan berbilang peringkat yang dilaksanakan semasa pemasangan apl dan pengesahan domain:
Lapisan 1: Binari Apl Ditandatangani
│
├── application-identifier (<Prefix>.<BundleID>)
├── com.apple.developer.team-identifier
└── com.apple.developer.associated-domains (applinks:example.com)
│
▼
Lapisan 2: Penghantaran AASA & Ingesti CDN
│ (Infrastruktur urusan Apple mengambil AASA asal)
▼
Lapisan 3: Skema AASA & Pemadanan Corak
│ (Mengesahkan tatasusunan appIDs dan komponen/laluan peraturan haluan)
▼
Lapisan 4: Keadaan Perkaitan Peranti
│ (Sistem pengendalian mendaftarkan domain disahkan dalam pangkalan data tempatan)
▼
Lapisan 5: Pelaksanaan Haluan Aplikasi
│ (Sistem menghalakan URL yang sepadan kepada pengendali kitaran hayat aplikasi)

Senarai Semak Pembaikan Pantas: Rutin Diagnostik 30 Saat
Apabila Pautan Universal tiba-tiba kembali kepada pengendalian web, sahkan perkara ini mengikut urutan:
- Ekstrak Pengecam Ditandatangani: Periksa hak kelayakan terbenam binari yang dikompilasi untuk mendapatkan
application-identifieryang tepat (<Prefix>.<BundleID>). - Sahkan Format Hak Kelayakan: Sahkan bahawa
com.apple.developer.associated-domainsmengandungi nama hos yang tepat (cth.,applinks:subdomain.domain.com) tanpa laluan yang tidak diperlukan, rentetan pertanyaan, atau garis miring penutup. - Audit AASA Asal: Ambil
https://subdomain.domain.com/.well-known/apple-app-site-associationdan pastikan Pengecam Aplikasi yang ditandatangani disenaraikan secara verbatim dalamappIDs. - Sahkan Pemadanan Laluan: Sahkan bahawa URL sasaran sepadan dengan corak
componentsataupathsyang ditentukan dalam konfigurasi AASA. - Semak Skop Domain: Pastikan hak kelayakan domain berkaitan merangkumi nama hos sasaran dan konfigurasi AASA yang sepadan tersedia untuk nama hos tersebut. Untuk subdomain, gunakan nama hos eksplisit atau bentuk kad bebas
*.yang disokong mengikut kesesuaian. - Asingkan Mod Pembangunan: Gunakan
?mode=developerpada binaan bertandatangan pembangunan untuk memintas pencachean CDN Apple semasa lelaran.
Sebab Ketepatan ID Bundle dan Pengecam Aplikasi Penting
Anatomi Pengecam Aplikasi
Pengesahan Pautan Universal tidak menilai nama paparan aplikasi, skema URL dalaman, atau nama bundle. Menurut dokumentasi Apple mengenai applinks.Details, model keselamatan bergantung sepenuhnya pada Pengecam Aplikasi layak penuh, berstruktur seperti:
Di mana:
ApplicationIdentifierPrefix: Prefiks ID App yang ditetapkan dalam konfigurasi akaun Pembangun Apple anda (cth.,9JA723G82S). Bagi kebanyakan akaun pembangun moden, nilai ini sepadan dengan ID Pasukan 10 aksara, tetapi jurutera harus mengesahkan prefiks sebenar dalam Portal Pembangun Apple mereka daripada menganggap kedua-duanya boleh ditukar ganti.CFBundleIdentifier(ID Bundle): Rentetan DNS terbalik yang sensitif huruf besar-kecil yang ditentukan dalam tetapan binaan sasaran (cth.,com.example.mobileapp).
Dalam fail JSON apple-app-site-association (AASA) yang dihoskan, rentetan komposit ini muncul di dalam tatasusunan appIDs atau kemasukan kamus appID (cth., 9JA723G82S.com.example.mobileapp. Jika percanggahan aksara, perbezaan huruf besar-kecil, atau ruang penutup wujud antara hak kelayakan terbenam binari yang dikompilasi dan kemasukan AASA yang dihoskan, pengesahan domain akan gagal.
Ketidakpadanan ID Bundle ialah salah satu punca keutamaan tertinggi untuk diperiksa semasa triaj integrasi, tetapi ia bukan satu-satunya sebab Pautan Universal boleh kembali kepada web.
Bagaimana Domain Berkaitan dan AASA Mewujudkan Perkaitan Dua Hala
Tidak seperti skema URL tersuai, yang boleh diisytiharkan oleh mana-mana aplikasi yang dipasang tanpa pengesahan domain, Pautan Universal mewujudkan perkaitan dua hala yang selamat:
- Pengisytiharan Apl kepada Domain: Aplikasi iOS yang dikompilasi mengisytiharkan bahawa ia menuntut pemilikan domain web tertentu dengan memasukkan hak kelayakan
com.apple.developer.associated-domainsdalam tandatangan kodnya. - Kebenaran Domain kepada Apl: Domain web mengesahkan bahawa ia memberikan kebenaran penghalaan kepada aplikasi tertentu dengan mengehoskan fail JSON AASA di
https://<domain>/.well-known/apple-app-site-associationatauhttps://<domain>/apple-app-site-association.
Semasa pemasangan atau kemas kini apl, sistem pengendalian mengesahkan hak kelayakan Domain Berkaitan bertandatangan apl berbanding konfigurasi AASA yang diambil untuk domain tersebut. Pengecam Aplikasi yang digunakan untuk perkaitan apl mesti sepadan dengan pengecam sepadan yang diisytiharkan dalam konfigurasi AASA. Selepas pengecam sepadan, URL yang diminta juga mesti memenuhi peraturan components atau paths yang dikonfigurasikan.
Simptom Kegagalan: Mengapa Pengecam Tidak Sepadan Memaksa Laluan Pulang Web
Apabila ketidakpadanan Pengecam Aplikasi berlaku, iOS biasanya tidak memaparkan ketidakpadanan Pengecam Aplikasi sebagai pengecualian masa jalan yang fatal. Kegagalan tersebut sebaliknya dicerminkan dalam keadaan pengesahan domain berkaitan, diagnostik peranti, atau tingkah laku laluan pulang web yang terhasil:
- Pengendalian Sistem: Apabila perkaitan domain gagal, sistem tidak memanggil apl melalui laluan Pautan Universal yang disahkan. Bergantung pada cara URL dibuka dan konteks pelayar di sekelilingnya, URL kekal dalam atau kembali kepada pengendalian web dan bukannya dihantar kepada aplikasi asli.
- Kesan Pengalaman Pengguna: Apabila pengguna mengetik pautan web yang sepadan dalam Mesej, Mel, atau Safari, sistem gagal mengenali pemetaan apl asli yang dibenarkan dan membuka URL web dalam pelayar.
Lihat Juga: ID Bundle ──> Seni Bina Pautan Universal
Bagaimana CDN Apple Mengambil dan Mencache Fail AASA
Salasilah Pemasangan dan Mekanik CDN Apple
Apabila aplikasi yang mengandungi hak kelayakan com.apple.developer.associated-domains dipasang atau dikemas kini, sistem menetapkan atau menyegarkan hubungan domain berkaitan:
- Pengikis Perantara CDN: Apabila sistem menetapkan atau menyegarkan hubungan domain berkaitan, ia mendapatkan data AASA domain melalui infrastruktur domain berkaitan Apple dan menggunakan data tersebut untuk mengesahkan perkaitan.
- Kitaran Hayat Pencachean Bebas: CDN yang diuruskan Apple mengawal kitaran hayat muat semula dan pencacheannya sendiri, jadi kemas kini asal tidak seharusnya dianggap serta-merta kelihatan melalui CDN. Semasa menguji perubahan, gunakan mod alternatif pembangunan yang didokumenkan jika berkenaan dan periksa keadaan perkaitan peranti.
- Keperluan Pelayan Asal: Pelayan web asal mesti menyediakan fail AASA melalui HTTPS dengan sijil TLS yang sah dan dipercayai (sijil ditandatangani sendiri ditolak), menggunakan jenis MIME
application/json. Pengehosan AASA tidak boleh bergantung padaubah hala HTTP; titik akhir AASA harus mengembalikan fail secara terus dengan HTTP 200 OK.
Konsistensi Format JSON AASA
Versi iOS moden menyokong sintaks kamus components berbutir sambil mengekalkan keserasian ke belakang dengan tatasusunan paths lama.
Menurut Nota Teknikal Pembangun Apple TN3155 mengenai Nyahpepijat Pautan Universal, dalam kemasukan details yang diberikan, pembangun harus menggunakan sama ada struktur moden appIDs + components atau struktur lama appID + paths; jangan campurkan kedua-dua struktur dalam kemasukan yang sama, kerana konfigurasi bercampur boleh menghasilkan tingkah laku pengesahan yang tidak dijangka.
Contoh AASA lama biasanya menyertakan "apps": []. Untuk penggunaan yang menyasarkan keluaran OS Apple moden, kekunci ini tidak diperlukan; kekalkannya hanya apabila menyokong versi OS lama yang khusus memerlukannya.
Protokol Diagnostik: Aliran Kerja Penyelesaian Langkah demi Langkah
Langkah 1: Periksa Hak Kelayakan Apl Ditandatangani dengan codesign
Untuk menentukan sama ada IPA yang dieksport atau binaan nyahpepijat mengandungi Pengecam Aplikasi dan Domain Berkaitan yang dijangka tepat, periksa tandatangan kod binari secara langsung menggunakan utiliti baris arahan macOS codesign. Semak application-identifier, com.apple.developer.team-identifier, dan com.apple.developer.associated-domains bersama-sama.
Profil peruntukan menunjukkan keupayaan dan domain yang dibenarkan oleh profil; boleh laku bertandatangan (codesign) menunjukkan apa yang sebenarnya terkandung dalam binari yang dihantar.
Langkah 2: Audit Skema JSON AASA yang Dihoskan
Sahkan bahawa pelayan asal mengehoskan fail AASA sah yang boleh diakses umum tanpa pengesahan atau ubah hala. Perhatikan bahawa contoh AASA lama biasanya menyertakan "apps": [], manakala konfigurasi moden yang menyasarkan keluaran iOS kontemporari meninggalkan kekunci ini.
Skema JSON AASA standard di bawah menggambarkan penghalaan laluan yang betul menggunakan struktur moden appIDs dan components:
```json
{
"applinks": {
"details": [
{
"appIDs": [
"9JA723G82S.com.example.mobileapp",
"9JA723G82S.com.example.mobileapp.staging"
],
"components": [
{
"/": "/product/*",
"comment": "Matches product detail routes"
},
{
"/": "/invite/*",
"?": { "ref": "?*" },
"comment": "Matches referral links with custom query parameters"
},
{
"/": "/help/*",
"exclude": true,
"comment": "Excludes customer support URLs from native routing"
}
]
}
]
}
}
Langkah 3: Jalankan Alatan CLI Diagnostik (codesign, swcutil, curl)
Pada versi macOS yang menyediakan diagnostik swcutil, gunakan alat tersebut untuk memeriksa atau mengesahkan data domain berkaitan. Oleh kerana pilihan arahan boleh berbeza merentas keluaran OS dan rantaian alat, sahkan pilihan yang tersedia dengan swcutil --help sebelum menjalankan aliran kerja diagnostik di bawah:
# 0. Sahkan pilihan yang tersedia (sintaks mungkin berbeza mengikut OS dan keluaran rantaian alat)
swcutil --help
# 1. Nyahpek arkib IPA yang dieksport
unzip -q YourApp.ipa -d UnpackedApp
# 2. Ekstrak dan periksa hak kelayakan bertandatangan secara terus daripada binari boleh laku
codesign -d --entitlements :- "UnpackedApp/Payload/YourApp.app" > signed-entitlements.plist 2>/dev/null
/usr/libexec/PlistBuddy -c "Print" signed-entitlements.plist
# 3. Semak sama ada data AASA boleh dimuat turun untuk domain menggunakan swcutil (alat diagnostik macOS)
sudo swcutil dl -d custom.opwakeup.com
# 4. Sahkan pemadanan corak AASA berbanding URL tertentu menggunakan swcutil
sudo swcutil verify -d custom.opwakeup.com -j ./apple-app-site-association -u https://custom.opwakeup.com/product/123
# 5. Pertanyakan titik akhir diagnostik CDN Domain Berkaitan yang diuruskan Apple secara terus
curl -i https://app-site-association.cdn-apple.com/a/v1/custom.opwakeup.com
Periksa titik akhir CDN Domain Berkaitan yang diuruskan Apple apabila menyelesaikan masalah data AASA yang dihantar di pinggir. Anggap titik akhir ini sebagai infrastruktur diagnostik dan bukannya sebagai kontrak API awam.
Langkah 4: Gunakan Mod Pembangun Domain Berkaitan untuk Ujian AASA
Menurut dokumentasi Apple mengenai Mengonfigurasi Domain Berkaitan, Apple menyediakan mod alternatif untuk pembangunan. Mod developer (?mode=developer) membolehkan peranti pembangunan yang layak memintas CDN yang diuruskan Apple dan mengambil fail AASA secara terus daripada domain berkaitan melalui HTTPS.
Konfigurasi di bawah menunjukkan cara mengisytiharkan Mod Pembangun dalam konfigurasi hak kelayakan Xcode yang berasingan:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:custom.opwakeup.com</string>
</array>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:custom.opwakeup.com?mode=developer</string>
</array>
</dict>
</plist>
Sebaik sahaja sistem pengendalian menetapkan perkaitan domain, penghalaan peringkat aplikasi mengendalikan muatan URL yang masuk menggunakan perwakilan kitaran hayat UIKit atau SwiftUI standard:
import UIKit
// ----------------------------------------------------------------------------
// 1. Implementasi AppDelegate UIKit
// ----------------------------------------------------------------------------
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
function application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
return true
}
// Panggilan Balik Sambungan Pautan Universal Apple Standard
function application(
_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL else {
return false
}
print("Mengendalikan Pautan Universal yang disahkan: \(incomingURL.absoluteString)")
// Hantar incomingURL kepada penghala dalaman atau lapisan SDK untuk pengekstrakan parameter
return handleIncomingRoute(incomingURL)
}
private func handleIncomingRoute(_ url: URL) -> Bool {
// Logik penghalaan destinasi peringkat aplikasi
// Nota: Mengembalikan true menunjukkan apl mengendalikan aktiviti tersebut, bukan penghuraian URL berjaya.
return true
}
}
// ----------------------------------------------------------------------------
// 2. Implementasi Kitaran Hayat SceneDelegate (iOS 13+)
// ----------------------------------------------------------------------------
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
function scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
if let userActivity = connectionOptions.userActivities.first(where: { $0.activityType == NSUserActivityTypeBrowsingWeb }),
let incomingURL = userActivity.webpageURL {
print("Pautan Universal Pelancaran Sejuk: \(incomingURL.absoluteString)")
}
}
function scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL {
print("Pautan Universal Latar Depan: \(incomingURL.absoluteString)")
}
}
}
Untuk mendayakan Mod Pembangun sisi klien pada perkakasan fizikal:
- Pada iOS 16+, navigasi ke Tetapan > Privasi & Keselamatan > Mod Pembangun dan Togol ke HIDUP (but semula peranti diperlukan).
- Navigasi ke Tetapan > Pembangun > Pembangunan Domain Berkaitan dan togol suis ke HIDUP.
- Pasang binaan pembangunan yang ditandatangani dengan profil peruntukan pembangunan yang mengandungi hak kelayakan
?mode=developer. - Nota Pengeluaran: Pastikan
?mode=developerdihadkan kepada konfigurasi pembangunan dan ujian dalaman, dan jangan menyertakannya dalam hak kelayakan domain berkaitan pengeluaran melainkan penggunaan anda secara eksplisit memerlukan dan menyokong konfigurasi tersebut.
Poko Decision Tree Punca Masalah
Pautan Universal kembali kepada pengendalian web
│
├── Adakah application-identifier bertandatangan sepadan dengan appIDs AASA?
│ ├── TIDAK ──> Betulkan Prefiks ID App atau ID Bundle dalam AASA
│ └── YA
│
├── Adakah hak kelayakan associated-domains menyenaraikan domain yang tepat?
│ ├── TIDAK ──> Tambah applinks:<domain> pada hak kelayakan sasaran
│ └── YA
│
├── Adakah sudo swcutil dl -d <domain> berjaya?
│ ├── TIDAK ──> Betulkan HTTPS asal, sijil TLS, atau ubah hala 301/302
│ └── YA
│
├── Adakah sudo swcutil verify sepadan dengan laluan URL sasaran?
│ ├── TIDAK ──> Betulkan sintaks components atau paths dalam AASA
│ └── YA
│
└── Semak keadaan perkaitan peranti dan pengendali penghalaan aplikasi dalaman

Matriks Diagnostik: Punca Kegagalan Pautan Universal
| Mod Kegagalan | Punca Asas | Tingkah Laku Sistem Pemerhatian | Pemulihan Disyorkan |
|---|---|---|---|
| Kesilapan Taip ID Bundle | Sensitiviti huruf besar-kecil atau ketidakpadanan aksara dalam appIDs AASA |
Pautan membuka pelayar dan bukannya apl asli | Betulkan rentetan dalam JSON AASA dan edarkan semula ke asal |
| Ketidakpadanan Prefiks ID App | Menggunakan prefiks yang salah dan bukannya Prefiks ID App Pembangun sebenar | Perkaitan domain gagal semasa pemasangan | Sahkan Prefiks Pengecam Aplikasi dalam Pusat Ahli Apple |
| Ketidakpadanan Subdomain | Hak kelayakan menunjuk kepada www.example.com manakala AASA berada pada example.com |
Apl gagal menuntut pautan daripada subdomain | Hoskan fail AASA khusus pada setiap subdomain yang dituntut atau konfigurasikan kad bebas |
| Ubah Hala HTTP pada Titik Akhir | Pelayan asal mengembalikan ubah hala 301 atau 302 untuk URL AASA | Pengikis CDN Apple menolak fail AASA | Konfigurasikan pelayan web untuk mengembalikan 200 OK secara terus |
| Ketidakkonsistenan Format AASA | Mencampurkan appID/paths lama dengan appIDs/components moden |
Pemadanan laluan tidak konsisten atau separa | Piawaikan pada sintaks appIDs + components moden |
| Ketidakpadanan Corak URL | AASA dimuat turun dengan berjaya tetapi URL yang diminta tidak sepadan dengan corak | Pautan dibuka dalam pelayar web | Sahkan sintaks laluan dan komponen menggunakan swcutil verify |
| Mod Pembangun Kekal dalam Keluaran | Binaan pengedaran mengekalkan mod alternatif pembangunan | Hak kelayakan tidak standard dalam binaan pengedaran | Alih keluar ?mode=developer dalam konfigurasi binaan Keluaran |

Mengimplementasikan Konfigurasi Persekitaran Dwi dalam Xcode
Menguruskan Berbilang Konfigurasi Binaan (Debug, Staging, Production)
Saluran paip pembangunan perusahaan kerap menguruskan ID Bundle berbeza merentas persekitaran binaan (cth., com.example.app.debug, com.example.app.staging, com.example.app).
Untuk mengekalkan Pautan Universal yang berfungsi merentas semua konfigurasi binaan:
-
Pengisytiharan AASA Eksplisit: Fail AASA yang dihoskan mesti secara eksplisit menyenaraikan Pengecam Aplikasi layak penuh setiap persekitaran dalam tatasusunan
appIDs:"appIDs": [ "9JA723G82S.com.example.app", "9JA723G82S.com.example.app.staging", "9JA723G82S.com.example.app.debug" ] -
Hak Kelayakan Khusus Sasaran: Gunakan tetapan konfigurasi binaan Xcode untuk memautkan fail
.entitlementsberbeza setiap konfigurasi binaan, memastikan domain pengeluaran tidak ditanya oleh binaan nyahpepijat dalaman.
Menguruskan Pengecam Sasaran
Untuk penyelesaian masalah Pautan Universal, gunakan ID Bundle dan Prefiks Pengecam Aplikasi yang tepat daripada binaan bertandatangan dan bukannya bergantung pada pengecam kad bebas. Rawat setiap nama hos secara eksplisit: jika apl menuntut example.com dan www.example.com, konfigurasikan kemasukan domain berkaitan yang sepadan dan pastikan setiap nama hos menyediakan data AASA yang bersesuaian. Pastikan hak kelayakan dikonfigurasikan pada sasaran yang sebenarnya mengendalikan Pautan Universal, dan sahkan mana-mana sambungan apl atau sasaran watchOS secara berasingan apabila berkenaan.
Mengesahkan Profil Peruntukan Terbenam dan Binari Bertandatangan dalam CI/CD
Automatikkan pengesahan hak kelayakan dan Pengecam Aplikasi di dalam skrip binaan integrasi berterusan sebelum memuat naik binari ke TestFlight:
# Skrip pengesahan CI automatik
security cms -D -i /path/to/embedded.mobileprovision > provision.plist
# 1. Periksa hak kelayakan profil untuk Domain Berkaitan yang dibenarkan
/usr/libexec/PlistBuddy -c "Print :Entitlements:com.apple.developer.associated-domains" provision.plist
# 2. Ekstrak hak kelayakan bertandatangan sebenar daripada binari boleh laku yang dikompilasi
codesign -d --entitlements :- "UnpackedApp/Payload/YourApp.app" > signed-entitlements.plist 2>/dev/null
SIGNED_APP_ID=$(/usr/libexec/PlistBuddy -c "Print :application-identifier" signed-entitlements.plist)
echo "Pengecam Aplikasi Bertandatangan Diekstrak: $SIGNED_APP_ID"
# 3. Sahkan bahawa Domain Berkaitan bertandatangan sepadan dengan domain sasaran
/usr/libexec/PlistBuddy -c "Print :com.apple.developer.associated-domains" signed-entitlements.plist
# 4. Sahkan bahawa ID App bertandatangan wujud dalam fail AASA yang dihoskan melalui Python
python3 -c "
import json, sys
signed_id = sys.argv[1]
data = json.load(open('apple-app-site-association'))
app_ids = [app for detail in data.get('applinks', {}).get('details', []) for app in detail.get('appIDs', [])]
if signed_id not in app_ids:
print(f'AASA mismatch: {signed_id} not found in AASA appIDs: {app_ids}')
sys.exit(1)
print(f'AASA consistency check passed: {signed_id} registered')
" "$SIGNED_APP_ID"
Jika skrip pengesahan keluar dengan kod ralat, batalkan saluran paip binaan untuk mengelakkan penghantaran binari pautan mendalam yang tidak berfungsi ke pengeluaran.

Kriteria Pemadanan Pautan Universal
Untuk memastikan penghalaan yang boleh dipercayai, syarat berikut mesti dipenuhi secara serentak:
Konfigurasi Apl Bertandatangan:
application-identifier = <ApplicationIdentifierPrefix>.<CFBundleIdentifier>
com.apple.developer.associated-domains = applinks:<hostname>
Konfigurasi AASA:
appIDs = [..., "<ApplicationIdentifierPrefix>.<CFBundleIdentifier>", ...]
components / paths = Memadankan laluan URL sasaran dan parameter pertanyaan
Kelayakan Sistem:
1. Hak kelayakan Associated Domains secara eksplisit mengandungi nama hos sasaran.
2. Pengecam Aplikasi yang ditandatangani sepadan dengan kemasukan yang dibenarkan dalam appIDs AASA.
3. URL yang masuk memenuhi corak penghalaan AASA.
4. Keadaan perkaitan peranti dan konteks pengguna/pelayar membenarkan perwakilan aplikasi asli.
Walaupun apabila hak kelayakan, perkaitan AASA, dan corak URL semuanya sepadan, penghalaan yang diperhatikan masih boleh bergantung pada keadaan peranti dan konteks pengguna atau pelayar. Sebagai contoh, apabila pengguna mengetik pautan universal semasa sedang melayari domain yang sama dalam Safari, sistem pengendalian mungkin menghormati niat pengguna untuk kekal dalam Safari.
Soalan Lazim (FAQ)
Apakah format tepat pengecam aplikasi dalam fail AASA?
Mengapakah Pautan Universal saya berfungsi dalam Mod Pembangun tetapi gagal dalam pengeluaran?
Bolehkah saya menggunakan asterisk kad bebas dalam tatasusunan appIDs AASA?
Ringkasan dan Rangka Kerja Keputusan
Kebolehpercayaan penghalaan Pautan Universal bergantung pada penjajaran tahap aksara yang tepat merentas tiga nod: konfigurasi App ID Portal Pembangun Apple, hak kelayakan com.apple.developer.associated-domains Xcode, and fail JSON apple-app-site-association yang dihoskan. SDK pihak ketiga atau rangka kerja penghalaan tidak boleh membaiki perkaitan domain sistem pengendalian yang gagal; ia hanya boleh memproses URL selepas iOS berjaya menghantar Pautan Universal kepada aplikasi. Jika Pautan Universal dikaitkan dengan betul pada peringkat sistem pengendalian tetapi pengekstrakan parameter gagal, periksa lapisan penghalaan peringkat aplikasi secara berasingan daripada lapisan perkaitan domain.
Jika aplikasi anda juga memerlukan pemulihan parameter pautan dinamik dan penghalaan onboarding selepas perkaitan Pautan Universal berjaya, OpoInstall menyediakan lapisan SDK pilihan untuk aliran kerja peringkat aplikasi tersebut.
Untuk mengetahui lebih lanjut tentang corak konfigurasi domain dan integrasi pautan mendalam, semak dokumentasi pautan mendalam OpoInstall.
Bahan Berkaitan
-
Konsep: Pengesahan Pengecam Aplikasi, Pengesahan Skema AASA, Pencachean CDN Apple, Pengekstrakan Hak Kelayakan
-
Teknologi: Pautan Universal iOS, Hak Kelayakan Xcode, Portal Pembangun Apple, Kredensial Web Berkongsi
-
Piawaian: IETF RFC 8259 (Pertukaran Data JSON), Spesifikasi TLS 1.3
-
Alat Diagnostik: Alat CLI Apple
codesign, Alat macOSswcutil, Pertanyaan Cache CDN yang diuruskan Apple
Dokumentasi Rasmi
Share this article



