Универсальные ссылки 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.

  1. cd desktop

  2. 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.

Другие вопросы по тегам