0

我运行了一个示例,在我的后端注册了我的设备,它通过 GCM 发送回设备消息。问题是我可以在应用程序是应用程序并运行时在 BroadCastreceiver.OnReceive 方法接收这些消息,但是如果我退出我的应用程序并再次发送推送,则不会发生任何事情。

我是否需要额外的实现才能让 Android 系统以原生方式显示推送(如 iOS 和 Windows Phone)。

我遵循了本指南,没有关于原生 Android 操作系统通知的内容:http: //developer.android.com/google/gcm/client.html

ps:当我在客户端应用程序关闭时发送消息时,我仍然收到成功响应:

{"multicast_id":5388850153658301208,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1382683020113430%1a3104c7f9fd7ecd"}]}

感谢您的任何建议!

更新1:清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          android:installLocation="auto" 
          package="com.pushtest.droid" 
          android:versionCode="1" 
          android:versionName="1">

  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />

  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
  <uses-permission android:name="android.permission.GET_ACCOUNTS" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />

  <permission android:name="com.pushtest.droid.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
  <uses-permission android:name="com.pushtest.droid.permission.C2D_MESSAGE" />

  <application android:label="push droid">
    <receiver android:name="com.pushtest.droid.MyGcmBroadcastReceiver"
              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" />
        <action android:name="com.google.android.gcm.intent.RETRY" />

        <category android:name="com.pushtest.droid" />
      </intent-filter>
    </receiver>
  </application>
</manifest>
4

1 回答 1

0

最终我错过了在 Android 中你必须自己显示 PUSH 通知这一事实。所以我已经实现了如下的处理逻辑,现在我可以在推送到达时看到我的通知,即使没有 IntentService(对不起语法,它是 monodroid,但 java 中的概念是相同的):

private void HandleMessage(Context context, Intent intent)
{
   var extras = intent.Extras;
   string message = extras.GetString("message");
   string title = extras.GetString("title");
   var notif = new Notification(Resource.Drawable.Icon, title);
   notif.Flags |= NotificationFlags.AutoCancel;
   notif.Defaults = NotificationDefaults.Sound | NotificationDefaults.Vibrate;
   var notificationIntent = new Intent(context, typeof(Activity1));
   notificationIntent.SetFlags(ActivityFlags.SingleTop);
   var contentIntent = PendingIntent.GetActivity(context, 0, notificationIntent, 0);
   notif.SetLatestEventInfo(context, title, message, contentIntent);
   var mNotificationManager = (NotificationManager)context.GetSystemService(Context.NotificationService);
   mNotificationManager.Notify(1, notif);
}
于 2013-10-25T16:24:16.813 回答