2016-04-19 3 views
1

Hintergrund:Universal-Link öffnet falsche Bündel ID

  • unsere App verschiedene Bundle-IDs verwendet für die Entwicklung baut vs Beta vs Produktion (App Store) baut baut
  • Ich bin derzeit die Umsetzung Universal-Verbindungen in unserer Entwicklung
  • baut
  • Unsere Produktion baut derzeit im App Store Universal-Verbindungen nicht

stützt ich dieses verrückte Problem erlebe, wo nicht nur nicht meine Universal-Links Öffnungs die Entwicklungsversion der App, sie starten stattdessen die Produktionsversion, trotz der Produktionsversion nicht die richtigen Berechtigungen.

Meine apple-app-site-association Datei validiert wurde wie so sowohl https://branch.io/resources/universal-links/ und https://search.developer.apple.com/appsearch-validation-tool/ und sieht mit:

{ 
    "applinks": { 
    "apps": [], 
    "details": [ 
     { 
     "appID": "DY74R9XXXX.com.myapp.consumer.debug", 
     "paths": [ "/profiles/*", "/messages/*"] 
     }, 
     { 
     "appID": "DY74R9XXXX.com.myapp.consumer", 
     "paths": [ "/profiles/*", "/messages/*"] 
     } 
    ] 
    } 
} 

Nach https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html der details Array, um bewertet werden sollte und nicht mehr, nachdem eine Übereinstimmung zu finden.

The order of the dictionaries in the array determines the order the system follows when looking for a match, so you can specify an app to handle a particular part of your website.

Die Absicht ist, dass der gleiche Universal-Link in meinem Team in der Entwicklungsversion für jedermann geladen wird, und in der Produktionsversion für Endnutzer, die nicht über das .debug Paket auf ihrem Handy.

Nicht nur funktioniert das nicht, aber wie erwähnt, die Universal Links laden immer die Produktionsversion, auch wenn die Produktionsversion fehlt die applinks:dev.myserver.com Berechtigung, die auf mich zeigt apple-app-site-association Datei. Dies scheint verrückt, aber es würde bedeuten, dass ich willkürliche Pakete starten kann, die ich nicht veröffentlicht habe und dass die Berechtigungsdatei nicht durchgesetzt wird.

Außerdem, wenn ich den zweiten Eintrag aus dem details Array entfernen und nur das Wörterbuch für die Debug-Version verlassen, funktionieren die universellen Links nicht, und öffnen Sie stattdessen Safari. Das Ändern der Reihenfolge des Arrays hat ebenfalls keine Auswirkungen. Ich habe dieses Verhalten auf einem iPhone 6s sowohl auf 9.3 als auch auf 9.3.1 erlebt. Jeder Hinweis auf diese zwei Isses (Starten des falschen Pakets und nicht Starten des Debug-Pakets, wenn es der einzige Eintrag ist) wird sehr geschätzt! zu

Nach dem Wechsel meines Bündel ID auf etwas anderes auf der dritten Ebene, pro Alex Bauer Vorschlag, ich war in der Lage: aktualisiert Auflösung unter

Original-Antwort -

+0

Bizarr wie dies scheint, es klingt wie iOS ist irgendwie die Berechtigungen zwischen "DY74R9XXXX.com.myapp.consumer.debug" und "DY74R9XXXX.com.myapp.consumer", möglicherweise zusammen, weil sie so ähnlich sind. Dies ist definitiv nirgendwo dokumentiert. Könnten Sie versuchen, die Paket-ID für den Debug-Build in etwas zu ändern, das eindeutig anders ist? –

+0

@AlexBauer Sie scheinen recht über die Ansprüche, die wegen der Ähnlichkeit verwirrt werden, aber das würde nicht erklären, warum es nicht mit nur einem Detaileintrag arbeitet. Aufgrund deines Vorschlags habe ich die Paket-ID jedoch in 'com.myapp.dev' geändert und es hat funktioniert. Ich habe es dann in 'com.myapp.dev.dev' geändert und das funktionierte genauso gut (mir ging es um einen Bug mit 4 Level Identifiern gegenüber dem typischen 3). Irgendwelche Vorschläge für die nächsten Schritte? – emkman

+1

Die Datei "app-app-site-association" wird nur bei der Installation der App abgerufen. Angenommen, dies ist tatsächlich ein Caching-Problem, denke ich, dass Sie jedes Mal * beide * App-Builds löschen müssen, um einen sauberen Test zu erhalten. Wenn Sie nur eines von ihnen löschten und neu installierten, konnte ich sehen, wie das diese anhaltenden Probleme verursachen würde. –

Antwort

2

Dieses kein Caching Problem war Holen Sie sich die Links zur Arbeit. Ich habe dann meine Bundle-ID zurück in com.myapp.consumer.debug geändert und sie arbeiteten weiter. Dies könnte ein seltsamer Caching-Fehler mit dem swcd-Dienst gewesen sein. Wenn ich jedoch den Eintrag DY74R9XXXX.com.myapp.consumer an die erste Stelle im Array verschiebe, wird die Consumer-Version weiterhin gestartet, obwohl keine Berechtigungen vorhanden sind. Dies scheint ein potenziell separater oder zusätzlicher Fehler zu sein, der sich auf vier Ebenen-Paket-IDs und eine falsche Zuordnung bezieht.

aktualisiert/richtige Lösung

Ändern der ID Bündel und dann ändert es zurück tatsächlich das Problem behoben, weil es meine Info.plist und project.pbxproj Dateien geändert.Als ich das diff ansah, wurde das wahre Problem sichtbar. Wir waren Einstellung vorher unseren Bundle-ID über diesen Wert im Info.plist:

<key>CFBundleIdentifier</key> 
<string>$(PRODUCT_BUNDLE_IDENTIFIER)${BUNDLE_ID_SUFFIX}</string> 

mit einer statischen PRODUCT_BUNDLE_IDENTIFIER in unserem project.pbxproj. Dies basierte auf zuvor veröffentlichten allgemeinen Praktiken für mehrere env-Builds. Doch in XCode 7 Apple hat eine Upgrade-Einstellungen werden dringend empfohlen, so dass Info.plist immer enthält:

<key>CFBundleIdentifier</key> 
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> 

Das war nie ein Thema vor, so weit wie Gebäude und Einreichen von iTunes mit dem richtigen Paketnamen. Allerdings ist es nun klar, dass bestimmte Merkmale diese genaue Einstellung erfordern, wie hier angemerkt: Use Bundle Identifier instead of Product Bundle Identifier with Xcode 7

Ich habe das Produkt-Bundle-ID für jeden Build-Typ über XCode wie gesehen here und jetzt funktioniert alles wie erwartet.

TL; DR - Universal Verbindungen zielen Ihre PRODUCT_BUNDLE_IDENTIFIER, nicht Ihre CFBundleIdentifier. Wenn Ihr PRODUCT_BUNDLE_IDENTIFIER nicht mit der endgültigen Paket-ID Ihres Pakets übereinstimmt, funktionieren Universal Links nicht ordnungsgemäß.

+0

Danke für Highlight-Problem. Ich versuche, durch Änderung in PRODUCT_BUNDLE_IDENTIFIER zu beheben, aber es gibt einen Fehler: _Für den Parameter 'appIdName' wurde ein ungültiger Wert 'XC $ CB_APP_ID' angegeben. Bereitstellungsprofil "iOS-Teambereitstellungsprofil: *" unterstützt die Funktion "Zugehörige Domänen" nicht. Bereitstellungsprofil "iOS Team Provisioning-Profil: *" enthält keine com.apple.Berechtigung für Entwickler-assoziierte Domänen. Code Signing ist für Produkttyp 'Anwendung' in SDK 'iOS 10.0'_ erforderlich. Könnten Sie bitte überprüfen? – CoDe

0

Andere Lösung für den Fall, wenn Sie mit mehreren Ziel & mehrere Firebase-Projekt arbeiten.

  1. erstellen Berechtigungen Datei jeweils für Ziel und
  2. Erstellen Sie verschiedene Deep Link in Firbase Console.
  3. Verwenden Sie App_code von Firebase Console, um die Berechtigungsdatei -> Associated_Domain-Name zu aktualisieren.

Das ist es. Generieren Sie das Linkformular mit einem anderen app_code. Es wird eine angesehene Anwendung starten.