使用GCM推送通知无效

时间:2015-09-14 14:45:17

标签: google-cloud-messaging

我们正在进行Android应用程序开发,我们应该使用GCM(C#)进行主题消息传递。

我们在Google Developer Console中创建了条目,为我们的Android应用启用了云消息传递,并且拥有API密钥+发件人ID +服务器密钥+浏览器密钥。

我们已在控制台Application / ASMX Web Service中编写了服务器端实现,以使用API​​密钥/浏览器密钥+发件人ID +主题名称检查Push,并且我们已成功从GCM获取MessageID / Multicast ID。

在客户端,我们已根据xamarin for Android提供的文档进行处理,并使用SenderID + Topicname正确放置了监听器服务(注册,意图,GCM)。我们正在获取注册令牌,并已订阅主题以及记录。

但我们目前没有在客户端获得推送通知。这是我们在实施部分中遗漏的东西吗?请建议。

Android清单文件:

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xamarin.gcmexample" android:versionCode="1" android:versionName="1.0">
    <uses-sdk />
    <application android:label="Notifications" android:icon="@drawable/Icon"></application>
    <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="com.xamarin.gcmexample.permission.C2D_MESSAGE" />
    <permission android:name="com.xamarin.gcmexample.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <application android:label="Notifications" 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="com.xamarin.gcmexample" />
            </intent-filter>
        </receiver>
        <service android:name="com.example.MyGcmListenerService" android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
        <service android:name="com.example.MyInstanceIDListenerService" android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
        </service>
    </application>
</manifest>

GCMReceiver代码

[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" })]
    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.Icon)
            .SetContentTitle("GCM Message")
            .SetContentText(message)
            .SetAutoCancel(true)
            .SetContentIntent(pendingIntent);

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

0 个答案:

没有答案