不调用Xamarin GCM OnMessageReceived [英] Xamarin GCM OnMessageReceived is not called

查看:100
本文介绍了不调用Xamarin GCM OnMessageReceived的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用此链接,但我无法从GCM获取消息。



我的ListenerService: 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(消息);

$ b $ 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(消息)
.SetAutoCancel(true)
.SetContentIntent(pendingIntent);

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


我的清单文件:

 <?xml version =1.0encoding =utf-8?>< manifest xmlns:android =http:// schemas。 android.com/apk/res/androidpackage =MYPACKGAGE NAMEandroid:installLocation =autoandroid:versionCode =1android:versionName =1> 
< uses-sdk android:minSdkVersion =15/>
<使用权限android:name =android.permission.READ_EXTERNAL_STORAGE/>
< uses-permission android:name =android.permission.WRITE_EXTERNAL_STORAGE/>
<使用权限android:name =android.permission.READ_CONTACTS/>
< uses-permission android:name =android.permission.READ_SMS/>
< uses-permission android:name =android.permission.READ_PROFILE/>
<使用权限android:name =android.permission.READ_PHONE_STATE/>
< uses-permission android:name =com.google.android.c2dm.permission.RECEIVE/>
<使用权限android:name =android.permission.WAKE_LOCK/>
< uses-permission android:name =android.permission.INTERNET/>
< uses-permission android:name =android.permission.ACCESS_NETWORK_STATE/>
<使用权限android:name =MYPACKGAGE NAME.permission.C2D_MESSAGE/>
<使用权限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_MESSAGEandroid:protectionLevel =signature/>
< application android:label =MYAPPandroid:icon =@ drawable / Icon>< / application>
< receiver android:name =com.google.android.gms.gcm.GcmReceiverandroid:exported =trueandroid:permission =com.google.android.c2dm.permission.SEND>
< intent-filter>
< category android:name =MYPACKGAGE NAME/>
< / intent-filter>
< / receiver>< / manifest>

我的服务器通过 message_id ,但是OnMessageReceived方法没有被调用,我可以获取标记。 我找到了解决方案。这是我的错误

 < application android:label =MYAPPandroid:icon =@ drawable / Icon> /应用程序> 
< receiver android:name =com.google.android.gms.gcm.GcmReceiverandroid:exported =trueandroid:permission =com.google.android.c2dm.permission.SEND>
< intent-filter>
< category android:name =MYPACKGAGE NAME/>
< / intent-filter>
< / receiver>
< / manifest>

应该是

 < application android:label =MYAPPandroid: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>
< category android:name =MYPACKGAGE NAME/>
< / intent-filter>
< / receiver>
< / application>
< / manifest>

申请标记是收件人的父母

I implemented Xamarin Remote notification using this link, but I can't get messages from GCM. What did I miss?

My 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());
    }
}

My manifest file:

<?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>

My server received a success response with a message_id, but that OnMessageReceived method isn't called and I can get token.

解决方案

I find the solution. It's my mistake

<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>

it should be

<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>

application tag is parent of reciever

这篇关于不调用Xamarin GCM OnMessageReceived的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆