Настроить приложение Xamarin.Forms для iOS для универсальных ссылок?

Я следую этим инструкциям. Приложение представляет собой приложение Xamarin.Forms для iOS.

https://xamarinhelp.com/ios-universal-links/

Вот в чем я не уверен.

Сначала я добавляю хорошо известную папку в свое MVC 5 Web App. Я не мог добавить хорошо известную папку. Так как я не мог добавить "." перед папкой я добавил виртуальный каталог с помощью портала Azure.

Когда я пытаюсь получить доступ к файлу с помощью https://portal.mydomain.com/.well-known/apple-app-site-association, я получаю следующее сообщение.

"Ресурс, который вы ищете, был удален, изменилось его имя или временно недоступен".

Во-вторых, мне пришлось редактировать Entitlements.plist с помощью текстового редактора XML. Вот как выглядит моя запись.

<plist version="1.0">
 <dict>
  <key>com.apple.developer.associated-domains</key>
  <array>
    <string>applinks: portal.mydomain.com</string>
    <!--<string>your domain</string>-->
  </array>
 </dict>
</plist>

Далее, вот как выглядят ContinueUserActivity и OpenUrl.

// приложение AppLinks работает

public override bool ContinueUserActivity(UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
    {
        try
        {

            if (userActivity.ActivityType == "NSUserActivityTypeBrowsingWeb")
            {
                if (userActivity.WebPageUrl.AbsoluteString.Contains("/PublicOffers/OffersPage"))
                {

                    ((App)Xamarin.Forms.Application.Current).AppLinkRequest(new
                    Uri(userActivity.WebPageUrl.AbsoluteString));
                    return true;
                }

            }

        }
        catch
        {
            // Ignore issue for now
        }

        return base.ContinueUserActivity(application, userActivity, completionHandler);
    }

//AppLinks приложение не запущено

public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {

        try
        {
            var components = new NSUrlComponents(url, true);
            var path = components.Path;
            var query = components.Query;

            // Is this a known format?
            if (path == "/PublicOffers/OffersPage")
            {
                // Send to App.xaml.cs
                ((App)Xamarin.Forms.Application.Current).AppLinkRequest(new
                Uri(url.AbsoluteString));
                return true;
            }
        }
        catch
        {
            // Ignore issue for now
        }

        //return false;

        return base.OpenUrl(app, url, options);
    }

Наконец, я создал этот метод, который вызывает OnAppLinkRequestReceived.

public async void AppLinkRequest(Uri uri)
    {
        OnAppLinkRequestReceived(uri);
    }

Проблема в том, что ContinueUserActivity и OpenUrl никогда не вызывают.

Вот пример URL, который я хочу открыть / предложить приложению с помощью Universal Links.

https://portal.mydomain.com/PublicOffers/OffersPage?id=SOMEGUID&cid=SOMEGUID

Любые идеи, помощь или предложения с благодарностью. Спасибо!

ОБНОВЛЕНИЕ 1

Я добавил новый файл web.config в свою известную папку и настроил его так. Теперь я могу получить доступ к обоим файлам. Мои iOS Universal Links все еще не работают, хотя.

<?xml version="1.0" encoding="UTF-8"?>
 <configuration>
 <system.webServer>
  <staticContent>
   <mimeMap fileExtension="." mimeType="application/octet-stream" />
   <mimeMap fileExtension=".json" mimeType="application/json" />
  </staticContent>
 </system.webServer>
 </configuration>

ОБНОВЛЕНИЕ 2

Я наконец понял, почему мой файл Entitlements.plist не содержит опцию для связанных доменов. Чтобы увидеть эту опцию, вы должны щелкнуть правой кнопкой мыши по файлу, выбрать "Открыть с помощью..." и выбрать "Редактор списка свойств".

https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/provisioning/entitlements?tabs=vswin

ОБНОВЛЕНИЕ 3

Я только что запустил этот инструмент проверки и все было зеленым. Ищет файл apple-app-site-association.

http://branch.io/resources/aasa-validator/

Ваш домен действителен (действительный DNS). Ваш файл обслуживается по HTTPS. Ваш сервер не возвращает коды ошибок, превышающие 400. Заголовок "file-type" вашего файла найден:) Ваш JSON проверен.

ОБНОВЛЕНИЕ 4

Я просто сделал чистку, перестроил и собрал. Универсальные ссылки все еще не работают.

ОБНОВЛЕНИЕ 5

Я обновил до Visual Studio 2017 Enterprise и Xamarin.iOS 11.9.1.24. Сейчас я использую 11.3 SDK и все еще не могу заставить работать Universal Links. Я обновился до Xamarin.Forms 2.5.1.444934.

2 ответа

Решение

Я наконец-то заставил его работать, убрав пробел из этой строки.

<string>applinks: portal.mydomain.com</string>

Теперь это звучит так.

<string>applinks:portal.mydomain.com</string>.

Я понял это, потому что получал ошибку при отправке приложения в магазин приложений. Ошибка была:

подпись вашего приложения содержит права на подпись кода, которые не поддерживаются в iOS. В частности, значение applinks: portal.mydomain.com для ключевых com.apple.developer.associated-domains в Payload...

У меня были те же проблемы, файл apple-app-site-association проверен очень хорошо, и я реализовал ContinueUserActivity и OpenUrl-методы в AppDelegate.cs, но мои универсальные ссылки не работали при сборке и развертывании с моего компьютера Windows с использованием внешней сборки Mac хост.

Поэтому я решил, что мне следует попробовать ту же процедуру, но на этот раз все локально на моем хосте сборки Mac с Visual Studio для Mac. Клонировал проект, удалил приложение с моего телефона, пересобрал проект, развернул и вуаля, все заработало как шарм.

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