【问题标题】:Xamarin GCM OnMessageReceived is not called未调用 Xamarin GCM OnMessageReceived
【发布时间】:2017-04-12 18:54:40
【问题描述】:

我使用此 link 实现了 Xamarin Remote 通知,但我无法从 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 xmlns:android="http://schemas.android.com/apk/res/android" 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>

我的服务器收到带有 message_id 的成功响应,但未调用 OnMessageReceived 方法,我可以获取令牌。

【问题讨论】:

  • 你确定你使用的是对应的registration_token吗?
  • 主题的去向:/topics/phonenumber 订阅该主题,我检查令牌是否正确
  • 前几天我也遇到了同样的效果。创建主题需要一些时间。您可以在 Firebase 开发者控制台中看到它。
  • 否 可以发送该主题

标签: c# android xamarin google-cloud-messaging xamarin.android


【解决方案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>

应用程序标签是接收者的父级

【讨论】:

    【解决方案2】:

    应用程序标记是 AndroidMenifest.xml 中 Receiver 的父级!

    对于 FCM 和 GCM 的情况相同。

    -- 开始手动添加 Firebase --

    -- END 手动添加 Firebase -- 应用>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 2018-01-22
      • 1970-01-01
      • 2018-10-01
      • 2015-11-02
      相关资源
      最近更新 更多