в моем проекте Xamarin.Forms я использую OneSignal для уведомлений. В iOS Xamarin.Forms.Application.Current.MainPage = новая страница навигации (новая страница уведомления ()); работал, но в Android не работает. Я попытался использовать центр обмена сообщениями для связи с проектом PCL. Он работал, когда приложение работает в фоновом режиме, но не работает, когда приложение закрыто. Как я могу перенаправить конкретную страницу уведомления при получении уведомления в Android? Спасибо
Примечание: код отредактирован и проблема решена, я использовал общие настройки, чтобы контролировать, запускается ли приложение из уведомления или нет. Затем загружаю приложение xamarin.Forms.





Вы можете использовать метод ниже до вызова метода LoadApplication ().
if (Intent.Extras != null)
{
foreach (var key in Intent.Extras.KeySet())
{
if (key != null)
{
var value = Intent.Extras.GetString(key);
Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
}
}
}
LoadApplication(new App());
Вам необходимо установить метод intent.putExtra () в OnMessageReceivedMethod ().
intent.PutExtra("Key", "value");
Затем вы можете использовать перенаправление в файле App.xaml.cs на основе этого значения ключа. Потому что в Android, когда уведомление открыто, а приложение повторно инициализируется.
Я думаю, вам не нужно ставить условия ниже.
if (extrasList[0] == "true")
{
LoadApplication(new App(true));
}
else
{
LoadApplication(new App(false));
}
Сначала сохраните значение на глобальном уровне, чтобы его можно было использовать в файле App.cs. Просто используйте приведенный ниже код для обработки навигации по страницам в классе App (), например.
if (Device.RuntimePlatform == Device.Android)
{
if (YourKey == "true")
{
//handle that page navigation
}
else
{
//Default Page of App
}
}
Да, я передаю в качестве аргумента конструктору App ()
Поэтому, когда приложение закрыто и вы открываете приложение из уведомления, значение намерения не устанавливается. Верно?
Не могли бы вы поделиться своим кодом MainActivity?
Используя общие настройки в Android, я сохраняю значение при получении уведомления, а затем проверяю это значение при загрузке приложения. Это сработало для меня
@OguzhanOrhan Хорошо. Отлично.
Примечание: код отредактирован и проблема решена, я использовал общие настройки, чтобы контролировать, запускается ли приложение из уведомления или нет. Затем я загружаю приложение xamarin.Forms
public class MainActivity :
global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
InitializeUI();
global::Xamarin.Forms.Forms.Init(this, bundle);
global::Xamarin.FormsMaps.Init(this, bundle);
ImageCircleRenderer.Init();
tV = new TextView(this);
resources = this.Resources;
OneSignal.Current.StartInit("***APP ID***")
.InFocusDisplaying(OSInFocusDisplayOption.Notification)
.HandleNotificationReceived(HandleNotificationReceived)
.HandleNotificationOpened(HandleNotificationOpened)
.EndInit();
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(this);
var LaunchFromNotification = prefs.GetString("is_notification_received", "false");
if (LaunchFromNotification == "true")
{
LoadApplication(new App(true));
}
else
{
LoadApplication(new App(false));
}
OneSignal.Current.IdsAvailable(IdsAvailable); //Lets you retrieve the OneSignal player id and push token.
}
}
private static void HandleNotificationOpened(OSNotificationOpenedResult result)
{
ISharedPreferences prefs = PreferenceManager.GetDefaultSharedPreferences(Android.App.Application.Context);
ISharedPreferencesEditor editor = prefs.Edit();
editor.PutString("is_notification_received", "true");
editor.Apply();
}
protected override void OnResume()
{
base.OnResume();
ISharedPreferences prefs =
PreferenceManager.GetDefaultSharedPreferences(this);
ISharedPreferencesEditor editor = prefs.Edit();
editor.Remove("is_notification_received");
editor.PutString("is_notification_received", "false");
editor.Apply();
}
Вы пытаетесь перенаправить при инициализации приложения? Верно?