Связывание приложений в Xamarin.Forms

Я разработал браузер (приложение Xamarin) с именем «MyBrowser», и теперь я хочу, чтобы если пользователь нажимал на любую ссылку, он открывал список браузеров (вместе с «MyBrowser»), доступных для пользователя.

Как только пользователь выбирает «MyBrowser», оттуда он должен открыть ссылку в «MyBrowser».

что ты уже испробовал? Кроме того, щелкает ли пользователь ссылки в каком-либо другом приложении, таком как Chrome, Safari и т. д.? Получить помощь проще, если более подробно описать проблему и указать, что вы уже пробовали (и что пошло не так).

Timo Salomäki 02.04.2019 15:24

Что я знаю, так это то, что один из способов спасти это - это глубокая ссылка, когда вы упоминаете фильтры намерений, такие как ЭТО: <intent-filter android:label = "@string/filter_view_example_gizmos"> <action android:name = "android.intent.action.VIEW" /> <category android:name = "android.intent.category.DEFAULT" /> <category android:name = "android.intent.category.BROWSABLE" /> <!-- Принимает URI, начинающиеся с "example:// gizmos» --> <data android:scheme = "example" android:host = "gizmos" /> </intent-filter>

ravi kumar singh 03.04.2019 06:14

Хорошо, если я правильно понимаю, теперь вы хотите, чтобы это работало для всех ссылок, а не только для тех, которые начинаются с gizmos?

Timo Salomäki 03.04.2019 14:04

Да вы правильно поняли

ravi kumar singh 04.04.2019 11:20
1
4
83
1

Ответы 1

Если вы пытаетесь перехватить все URL-адреса в Интернете, например те, которые начинаются с http:// и https://, вы, безусловно, можете сделать это на Android, но на iOS это невозможно. Я приведу минимальный пример того, как перехватывать URL-адрес в вашем приложении, это должно стать хорошей отправной точкой для вашего продвижения вперед.

Андроид

На Android вам сначала нужно украсить свою основную активность атрибутом IntentFilter, который определяет действия, категории и схемы данных для использования (в основном это то же самое, что вы вставили в раздел комментариев, но на C#):

[Activity(Label = "UrlSample", MainLauncher = true)]
[IntentFilter(new[] { Intent.ActionView },
    Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, 
    DataSchemes = new[] { "http", "https" })]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
...

Пока приложение компилируется, эти атрибуты анализируются и вставляются в окончательный файл AndroidManifest.xml. Для получения дополнительной информации о процессе и его примере взгляните на Microsoft документация.

Теперь вы можете проверить в методе OnCreate файла MainActivity.cs, было ли приложение запущено с помощью соответствующего намерения. MessageCenter уведомит всех подписчиков о событии с именем новый_адрес (название зависит от вас) с экземпляром класса UrlMessage в качестве полезной нагрузки и URL, заданным для свойства в этом классе:

if (Intent != null && Intent.Action == Intent.ActionView)
{
    Uri data = Intent.Data;
    /* Get the full url with for example data.ToString() call and do whatever you want with it */
}

iOS

К сожалению, Apple не так снисходительна к схемам URL-адресов, как Android. В официальная документация они заявляют следующее:

You cannot claim support for some well-known URL schemes, including http, https, mailto, tel, sms, facetime, and facetime-audio. The system directs well-known types of URLs to the corresponding system apps and well-known http–based URLs to specific apps, such as Maps, YouTube, and Music.

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