Универсальные ссылки iOS
У меня возникли проблемы с работой универсальных ссылок в моем приложении. Вот то, что я уже сделал.
- создал мой apple-app-site-association
файл. Вот мой файл
{
"applinks": {
"apps": [],
"details": [{
"appID": "XXXXXXXXXX.com.companyName.app",
"paths": ["/view/*", "/class/*"]
}]
}
}
Я не подписал свой файл, и я установил цель развертывания своего проекта на iOS 9.2 (чтобы мне не нужно было подписывать этот файл).
- Добавлен связанный домен в мои возможности проекта
applinks:companyName.com
applinks:www.companyName.com
- Связанные домены также включены в моем портале для разработчиков
- Обновлены профили обеспечения и использованы новые
- Добавлено право на сборку.
- переопределил этот метод делегата
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
Файл доступен с моего HTTPS-сервера, и я проверил статус универсальных ссылок с помощью этого яблочного валидатора. https://search.developer.apple.com/appsearch-validation-tool/ Валидатор проверяет это. Но когда я нажимаю на ссылку, которая находится в iMessage, и она похожа на companyName.com/view/7375, она открывается в сафари, и мое приложение не получает никакого обратного вызова.
Любая идея, что мне не хватает
2 ответа
Может статься, что ОС теперь рассматривает обработку вашего URL в режиме "переопределения" - почему он переходит в Safari.
Когда ваше приложение разрешит Universal Link, в правом верхнем углу экрана вы увидите что-то вроде "companyName.com ->". Если вы нажмете это, это способ ОС "переопределить", как обрабатывается Universal Link, и открыть его в Safari в то время и навсегда.
Попробуйте вернуться в приложение "Сообщения" и нажмите и удерживайте ссылку. Через секунду или две вы увидите всплывающий лист действий с такими опциями, как "Открыть в Safari" и "Открыть в" Имя вашего приложения "". Выберите опцию "открыть от вашего имени". Это должно затем "сбросить" то, как ОС просматривает ваши Universal Links, теперь перенаправляя их обратно в ваше приложение.
Если вы поддерживаете универсальные ссылки, пользователи iOS 9 могут нажать ссылку на ваш веб-сайт и легко перенаправляться на ваше установленное приложение без использования Safari. Если ваше приложение не установлено, нажатие на ссылку на ваш сайт откроет ваш сайт в Safari.
Здесь вы узнаете, как настроить собственный сервер и обрабатывать соответствующие ссылки в вашем приложении.
Перейти на страницу разработчика Apple
Зарегистрируйте свое приложение на сайте developer.apple.com. Включите "Ассоциированные домены" в идентификаторе вашего приложения.
Включите "Ассоциированный домен" в своем проекте Xcode . Ошибка "Добавьте функцию связанных доменов в свой идентификатор приложения" исчезнет после того, как вы включите связанные домены в своем идентификаторе приложения на сайте developer.apple.com, как и в предыдущем случае. шаг. Если он не исчезнет, выйдите и перезапустите xcode несколько раз, и он будет работать.
Add the proper domain entitlement and make sure the entitlements file is included at build: Xcode will do it automatically by itself.
Then create apple-app-site-association file using Terminal
Use this commands for creating AASA(apple-app-site-association) File.
cd desktop
touch apple-app-site-association
Then open AASP FILE and write this json format data
{
"applinks": {
"apps": [ ],
"details": [
{
"appID": "TeamID.BundleID2",
"paths": [ "*" ]
}
]
}
}
Once you are ready with your AASA file, you can now host https://<>/.well-known/apple-app-site-association
Upload the apple-app-site-association file to your HTTPS web server. You can place the file at the root of your server or in the.well-known subdirectory.
ВАЛИДАТОР АССОЦИАЦИИ САЙТОВ APPLE APP (AASA) Перейдите по следующей ссылке и введите свое доменное имя. Он проверит, действителен ли файл AASA и доступен ли он. Ссылка: https://branch.io/resources/aasa-validator/
После этого добавьте этот код ниже в свой Appdelgate.
Swift4
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
print("Continue User Activity called: ")
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
print(url.absoluteString)
//handle url and open whatever page you want to open.
}
return true
}
Цель-c
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
}
return YES;
}
Затем проверьте свое право, добавьте в цель приложения и запустите его, чтобы перенаправить в ваше приложение. Убедитесь, что файл AASA будет подтвержден, как показано на экране ниже, а затем перенаправит его в ваше приложение. Если что-то пропущено, оно не было перенаправлено в ваше приложение.
Внутри вашего сервера возникла любая ошибка проверки типа контента, тогда вы можете создать один файл.htaccess и внутри него вы можете написать этот код.
<Files "apple-app-site-association">
ForceType 'application/json'
</Files>
Эта процедура сработала с моей стороны. Надеюсь, ваша сторона тоже работает правильно. Если вам понравилось читать этот пост.
Вы также должны реализовать следующую функцию AppDelegate.
- (BOOL)application:(UIApplication *)application willContinueUserActivityWithType:(NSString *)userActivityType
Я была такая же проблема. К сожалению, это не очень хорошо документировано Apple.