极光推送包含有通知与自定义消息两种类型的推送。本文描述他们的区别,以及建议的应用场景。
功能角度
通知
或者说 Push Notification,即指在手机的通知栏(状态栏)上会显示的一条通知信息。这是 Android / iOS 的基本功能。
一条通知,简单的填写纯文本的通知内容即可。
通知主要用于提示用户的目的。应用加上通知功能,有利于提高应用的活跃度。
两者的区别
功能角度
通知
或者说 Push Notification,即指在手机的通知栏(状态栏)上会显示的一条通知信息。这是 Android / iOS 的基本功能。
一条通知,简单的填写纯文本的通知内容即可。
通知主要用于提示用户的目的。应用加上通知功能,有利于提高应用的活跃度。
自定义消息
是极光推送自己的概念。
自定义消息不是通知,所以不会被SDK展示到通知栏上。其内容完全由开发者自己定义。
自定义消息主要用于应用的内部业务逻辑。一条自定义消息推送过来,有可能没有任何界面显示。
本质上:自定义消息是原始的消息,JPush SDK 不做处理。而通知,则 JPush SDK 会做通知展示处理,其目的是为了减轻开发人员的工作量。 所以,如果通知功能不太符合您的需求,你都可以使用自定义消息来实现(客户端展现App自己来做)。 |
开发者使用角度
通知
简单场景下的通知,用户可以不写一行代码,而完全由 SDK 来负责默认的效果展示,以及默认用户点击时打开应用的主界面。
JPush Android SDK 提供了 API 让开发者来定制通知栏的效果,请参考:自定义通知栏样式教程;也提供了 接收推送消息Receiver 让你来定制在收到通知时与用户点击通知时的不同行为。
自定义消息
SDK 不会把自定义消息展示到通知栏。
所以调试时,需要到日志里才可以看到服务器端推送的自定义消息。
自定义消息一定要由开发者写 接收推送消息Receiver 来处理收到的消息。
注意:当自定义消息内容msg_content为空时,SDK不会对消息进行广播,使得app无法接收到推送的消息,因此建议在使用自定义消息推送时添加内容 |
使用通知
请参考以下示例代码。
工具 通知 vs. 自定义消息 转至元数据结尾 转至元数据起始 两者的区别 功能角度 通知 自定义消息 开发者使用角度 通知 自定义消息 使用通知 使用自定义消息 参考 极光推送包含有通知与自定义消息两种类型的推送。本文描述他们的区别,以及建议的应用场景。 V2 API 只能向 Android 推送自定义消息,V3 API 可以向Android和iOS(需要是iOS1.7.3及以上的版本)推送自定义消息。 两者的区别 功能角度 通知 或者说 Push Notification,即指在手机的通知栏(状态栏)上会显示的一条通知信息。这是 Android / iOS 的基本功能。 一条通知,简单的填写纯文本的通知内容即可。 通知主要用于提示用户的目的。应用加上通知功能,有利于提高应用的活跃度。 自定义消息 是极光推送自己的概念。 自定义消息不是通知,所以不会被SDK展示到通知栏上。其内容完全由开发者自己定义。 自定义消息主要用于应用的内部业务逻辑。一条自定义消息推送过来,有可能没有任何界面显示。 本质上:自定义消息是原始的消息,JPush SDK 不做处理。而通知,则 JPush SDK 会做通知展示处理,其目的是为了减轻开发人员的工作量。 所以,如果通知功能不太符合您的需求,你都可以使用自定义消息来实现(客户端展现App自己来做)。 开发者使用角度 通知 简单场景下的通知,用户可以不写一行代码,而完全由 SDK 来负责默认的效果展示,以及默认用户点击时打开应用的主界面。 JPush Android SDK 提供了 API 让开发者来定制通知栏的效果,请参考:自定义通知栏样式教程;也提供了 接收推送消息Receiver 让你来定制在收到通知时与用户点击通知时的不同行为。 自定义消息 SDK 不会把自定义消息展示到通知栏。 所以调试时,需要到日志里才可以看到服务器端推送的自定义消息。 自定义消息一定要由开发者写 接收推送消息Receiver 来处理收到的消息。 注意:当自定义消息内容msg_content为空时,SDK不会对消息进行广播,使得app无法接收到推送的消息,因此建议在使用自定义消息推送时添加内容 使用通知 请参考以下示例代码。 public class MyReceiver extends BroadcastReceiver { private static final String TAG = "MyReceiver"; private NotificationManager nm; @Override public void onReceive(Context context, Intent intent) { if (null == nm) { nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); } Bundle bundle = intent.getExtras(); Logger.d(TAG, "onReceive - " + intent.getAction() + ", extras: " + AndroidUtil.printBundle(bundle)); if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { Logger.d(TAG, "JPush用户注册成功"); } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { Logger.d(TAG, "接受到推送下来的自定义消息"); } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { Logger.d(TAG, "接受到推送下来的通知"); receivingNotification(context,bundle); } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { Logger.d(TAG, "用户点击打开了通知"); openNotification(context,bundle); } else { Logger.d(TAG, "Unhandled intent - " + intent.getAction()); } } private void receivingNotification(Context context, Bundle bundle){ String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); Logger.d(TAG, " title : " + title); String message = bundle.getString(JPushInterface.EXTRA_ALERT); Logger.d(TAG, "message : " + message); String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); Logger.d(TAG, "extras : " + extras); } private void openNotification(Context context, Bundle bundle){ String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); String myValue = ""; try { JSONObject extrasJson = new JSONObject(extras); myValue = extrasJson.optString("myKey"); } catch (Exception e) { Logger.w(TAG, "Unexpected: extras is not a valid json", e); return; } if (TYPE_THIS.equals(myValue)) { Intent mIntent = new Intent(context, ThisActivity.class); mIntent.putExtras(bundle); mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(mIntent); } else if (TYPE_ANOTHER.equals(myValue)){ Intent mIntent = new Intent(context, AnotherActivity.class); mIntent.putExtras(bundle); mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(mIntent); } } }
时间: 2024-10-06 12:47:49