Настроить приложение 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. Клонировал проект, удалил приложение с моего телефона, пересобрал проект, развернул и вуаля, все заработало как шарм.