我们正在进行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());
}
}