Saya mencoba mengikuti petunjuk yang ditemukan di sini untuk menambahkan MessagingCenter tindakan berlangganan pada ketukan notifikasi yang akan membuka tampilan tertentu. Di suatu tempat Kirim / Berlangganan saya tidak berbicara satu sama lain dan saya tidak dapat melihat di mana. Detail pusat pesan masih baru bagi saya, jadi saya yakin saya hanya menggunakan kelas atau pengirim yang salah di suatu tempat.

Kode di bawah ini telah dimodifikasi dari apa yang ditunjukkan kepada saya di tautan. Idenya masih kurang lebih sama.

Inilah metode SendLocalNotification di kelas FirebaseService saya:

void SendLocalNotification(string body)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.SingleTop);
        intent.PutExtra("OpenPage", "SomePage");

        //Unique request code to avoid PendingIntent collision.
        var requestCode = new Random().Next();
        var pendingIntent = PendingIntent.GetActivity(this, requestCode, intent, PendingIntentFlags.OneShot);

        var notificationBuilder = new NotificationCompat.Builder(this)
            .SetContentTitle("Load Match")
            .SetSmallIcon(Resource.Drawable.laundry_basket_icon_15875)
            .SetContentText(body)
            .SetAutoCancel(true)
            .SetShowWhen(false)
            .SetContentIntent(pendingIntent);

        if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
        {
            notificationBuilder.SetChannelId(AppConstants.NotificationChannelName);
        }

        var notificationManager = NotificationManager.FromContext(this);
        notificationManager.Notify(0, notificationBuilder.Build());
    }

Berikut metode OnNewIntent di MainActivity android:

protected override void OnNewIntent(Intent intent)
    {
        if (intent.HasExtra("OpenPage"))
        {
            MessagingCenter.Send(this, "Notification");
        }

        base.OnNewIntent(intent);
    }

Dan di sinilah saya mencoba berlangganan pesan di LoadsPageViewModel saya (bukan di proyek Android):

public LoadsPageViewModel()
    {
        MessagingCenter.Subscribe<LoadsPageViewModel>(this, "Notification", (sender) =>
        {
             // navigate to a view here
        });
    }
0
user1818298 18 April 2020, 04:46

1 menjawab

Jawaban Terbaik

Agar MessagingCenter berfungsi, Anda harus menggunakan jenis/objek yang sama pada pengirim dan pelanggan.

Karena Anda mengirim dari Proyek Android, nilai this yang Anda gunakan di sini:

MessagingCenter.Send(this, "Notification");

Mewakili MainActivity.

Dan ketika Anda berlangganan di ViewModel Anda, Anda menggunakan objek ViewModel

MessagingCenter.Subscribe<LoadsPageViewModel>(this, "Notification", (sender) => { });

Inilah alasan mengapa Anda tidak menerima Pesan di sisi lain.

Untuk membuatnya berfungsi, Anda perlu mengubah yang berikut:

Di Aktivitas Utama Android, gunakan Kelas Xamarin.Forms.Application:

MessagingCenter.Send(Xamarin.Forms.Application.Current, "Notification");

Dan di ViewModel Anda gunakan kelas dan objek Xamarin.Forms.Application yang sama:

MessagingCenter.Subscribe<Xamarin.Forms.Application>(Xamarin.Forms.Application.Current, "Notification", (sender) =>
{
    Console.WriteLine("Received Notification...");
});

Dengan begitu Anda akan mematuhi apa yang diharapkan MessagagingCenter.

Semoga ini membantu.-

4
pinedax 18 April 2020, 04:47