Xamarin GCM OnMessageReceived не вызывается

Я реализовал Xamarin Remote notification с помощью этой ссылки, но не могу получать сообщения от GCM. Что я пропустил?

Мой ListenerService:

 [Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" }, Categories = new string[] { "MYPACKGAGE NAME IS HERE I WROTE" })]
public class MyGcmListenerService : GcmListenerService
{
    public override void OnMessageReceived(string from, Bundle data)
    {
        var message = data.GetString("message");
        Log.Debug("MyGcmListenerService", "From:    " + from);
        Log.Debug("MyGcmListenerService", "Message: " + message);
        SendNotification(message);
    }

    void SendNotification(string message)
    {
        var intent = new Intent(this, typeof(MainActivity));
        intent.AddFlags(ActivityFlags.ClearTop);
        var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

        var notificationBuilder = new Notification.Builder(this)
            .SetSmallIcon(Resource.Drawable.unknown)
            .SetContentTitle("GCM Message")
            .SetContentText(message)
            .SetAutoCancel(true)
            .SetContentIntent(pendingIntent);

        var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);
        notificationManager.Notify(0, notificationBuilder.Build());
    }
}

Мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?><manifest  package="MYPACKGAGE NAME" android_installLocation="auto" android_versionCode="1" android_versionName="1">
<uses-sdk android_minSdkVersion="15" />
<uses-permission android_name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android_name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android_name="android.permission.READ_CONTACTS" />
<uses-permission android_name="android.permission.READ_SMS" />
<uses-permission android_name="android.permission.READ_PROFILE" />
<uses-permission android_name="android.permission.READ_PHONE_STATE" />
<uses-permission android_name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android_name="android.permission.WAKE_LOCK" />
<uses-permission android_name="android.permission.INTERNET" />
<uses-permission android_name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android_name="MYPACKGAGE NAME.permission.C2D_MESSAGE" />
<uses-permission android_name="android.permission.GET_ACCOUNTS" />
<uses-permission android_name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android_name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android_name="android.permission.VIBRATE" />
<permission android_name="MYPACKGAGE NAME.permission.C2D_MESSAGE" android_protectionLevel="signature" />
<application android_label="MYAPP" android_icon="@drawable/Icon"></application>
<receiver android_name="com.google.android.gms.gcm.GcmReceiver" android_exported="true" android_permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android_name="com.google.android.c2dm.intent.RECEIVE" />
        <action android_name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android_name="MYPACKGAGE NAME" />
    </intent-filter>
</receiver></manifest>

Мой сервер получил успешный ответ с amessage_id, но этот метод OnMessageReceived не вызывается, и я могу получить маркер.

2 ответа

  1. Я нахожу решение. Это моя ошибка

    <application android_label="MYAPP" android_icon="@drawable/Icon">/application>
    <receiver android_name="com.google.android.gms.gcm.GcmReceiver" android_exported="true" android_permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android_name="com.google.android.c2dm.intent.RECEIVE" />
        <action android_name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android_name="MYPACKGAGE NAME" />
    </intent-filter>
    </receiver>
    </manifest>
    

    это должно быть

    <application android_label="MYAPP" android_icon="@drawable/Icon">
    <receiver android_name="com.google.android.gms.gcm.GcmReceiver" 
    android_exported="true" 
    android_permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android_name="com.google.android.c2dm.intent.RECEIVE" />
        <action android_name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android_name="MYPACKGAGE NAME" />
    </intent-filter>
    </receiver>
    </application>
    </manifest>
    

    бирка применения родитель reciever

  2. Бирка применения родитель приемника на AndroidMenifest.xml !

    Для FCM и GCM имеют один и тот же случай.

    < приложение android: allowBackup= «true» android: icon= «@mipmap / icon «android: label= » @string / app_name»>

    — Начало ручной Firebase дополнения —

    < приемник андроид:имя=»ком.гуглить.огневая база.идентификатор IID.FirebaseInstanceIdInternalReceiver»………………………

    — Конец ручной Firebase дополнения —
    < / приложение>