J'ai une application en cours d'exécution sur un serveur Web, qui redirige vers une application installée sur un appareil iOS 14. l'url est sous la forme de
myapp://?p=someBase64EncodedString
et l'application décode la chaîne. après la mise à niveau vers iOS 14, l'URL que l'application obtient est
myapp://?p=someBase64EncodedString#
et le symbole dièse ajouté à la fin de la chaîne ne parvient pas à décoder sur mon appareil. Lorsque vous utilisez ignoreUnknownCharacters
tout fonctionne ignoreUnknownCharacters
, mais d'où vient ce #
?
3 Réponses :
Il peut s'agir d'une action API dans une redirection pour une API que vous avez utilisée. Si tel est le cas, il est hors de votre contrôle et potentiellement hors de portée de l'accès.
Comme @jtbandes l'a mentionné dans les commentaires, #
est un caractère valide dans une URL.
Pour éviter ce genre de problèmes, le moyen le plus sûr d'analyser une URL consiste à utiliser URLComponents , en suivant cette réponse.
Voici un exemple:
scheme: https host: test.host.com port: 8080 path: /Test/Path query: test_parameter=test_value queryItems: [test_parameter=test_value] fragment: test-fragment
Cela aura comme sortie:
let urlString = "https://test.host.com:8080/Test/Path?test_parameter=test_value#test-fragment" let urlComponents = URLComponents(string: urlString) print("scheme: \(urlComponents?.scheme ?? "nil")") print("host: \(urlComponents?.host ?? "nil")") print("port: \(urlComponents?.port ?? -1)") print("path: \(urlComponents?.path ?? "nil")") print("query: \(urlComponents?.query ?? "nil")") print("queryItems: \(urlComponents?.queryItems ?? [])") print("fragment: \(urlComponents?.fragment ?? "nil")")
Swift 5 et les chaînes brutes pourraient-ils être le coupable? Je suppose que l'application utilise # comme délimiteur de chaîne personnalisé et, lors du décodage, remplace un caractère spécial par un #.
J'avais un problème similaire. Voir ici hackingwithswift.com/articles/126/whats-new-in-swift-5-0 et aussi ericasadun.com/2018/12/26/...
Comment l'application décode-t-elle l'URL? Un
#
est parfaitement valide dans une URL et indique le début du fragment. Voir aussi stackoverflow.com/questions/6691495/...Pouvez-vous publier l'URL complète? (y compris le
someBase64EncodedString
)