我在afterSave云代码方法中创建了一个自定义推送。电话看起来像这样:
Parse.Push.send({
where : query,
data : {
action : "com.acme.CUSTOM_ACTION_GOES_HERE",
content : messageContent
}
}).then(...
(查询定义为获取特定的Parse.Installation
个对象。)
在Android应用中,我有一个像这样注册的BroadcastReceiver
<receiver
android:name=".MyBroadcastReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.acme.CUSTOM_ACTION_GOES_HERE" >
</action>
</intent-filter>
</receiver>
在broadcastreceiver的onReceive方法中,我创建了自定义通知,其中我还定义了在单击通知时启动活动的待处理意图:
Intent contentIntent = new Intent(context, DisplayDetailsActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(DisplayDetailsActivity.class);
stackBuilder.addNextIntent(contentIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Notification noti = new Notification.Builder(context)
.setContentTitle("New message")
.setContentText(content)
.setSmallIcon(R.drawable.ic_stat_notify_message)
.setNumber(notificationsCount)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.build();
noti.defaults |= Notification.DEFAULT_SOUND;
NotificationManager mgr = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
mgr.notify(555, noti);
不调用(例如在应用程序的onCreate
方法中)
PushService.setDefaultPushCallback(getApplicationContext(), SomeActivity.class);
...推送未送到设备
使用该通话时,点击通知时会启动活动SomeActivity
,而不是广播接收器中意图中设置的活动DisplayDetailsActivity
。
当我只有一种类型的自定义通知时,可以使用setDefaultPushCallback
作为第二个参数调用DisplayDetailsActivity.class
。
但是,我计划有多个不同的自定义通知,单击每个自定义通知应该启动不同的活动。在这种情况下,上面提到的解决方法不再是可行的选择。
答案 0 :(得分:2)
经过几个小时的工作后,我偶然发现了这篇文章,我从@pareshgoel解决方法开始,基本的想法是删除注册一个Activity或订阅一个频道的需要(如果不需要)并降低服务器请求Installation
类。
我从Parse.com上获取了Parse-1.5.1.jar并使用了JD-GUI,我查看了PushService.setDefaultPushCallback(Context context, Class<? extends Activity> cls)
。
它做的是
if cls is null remove subscription;
create subscription for new cls;
call PushService.startServiceIfRequired
如果设备不支持GCM或向GCM发送注册请求,等待registration_id,并在到达时更新安装设备令牌,则函数PushService.startServiceIfRequired
启动解析推送服务。
我的解决方法是使用:PushService.startServiceIfRequired - 似乎没有记录,您可以在初始化后使用,或者如果您在登录/注册后拥有用户,因为它使用的是后台任务,它可以在主线程上调用。
另一个优点是使用PushService.startServiceIfRequired
您有2个服务器请求来保存/更新Installation
类,第一个将推送类型设置为GCM,第二个将pushtype设置为GCM,将设备令牌设置为registration_id 。 PushService.setDefaultPushCallback
引入了初始服务器请求。
答案 1 :(得分:0)
我遇到了同样的问题,并且有一个解决方法。
首先需要调用setDefaultPushCallback以使Parse推送通知正常工作。这很可能是一个Parse的错误。我正在使用Parse Android 1.5.1。
解决方法是不设置&#34;警报&#34; param中的param推送通知发送代码。 如果未设置,则Parse将不会自行显示警报,并且您的自定义广播接收器可以处理推送。
Parse中的推送通知需要更多的bug修复才能可靠地使用。