极光推送使用实例(二) Android客户端
来源:互联网 发布:淘宝瓜子是什么类目 编辑:程序博客网 时间:2024/05/16 10:48
上一篇简单介绍了极光推送在java服务端的实现,如果感兴趣的可以看一下极光推送使用实例(一)JAVA服务端。这篇文章介绍下极光推送在Android客户端的实现。
JPush Android SDK 是作为 Android Serivice 长期运行在后台的,从而创建并保持长连接,保持永远在线的能力。JPush Android SDK 由于使用自定义协议,协议体做得极致地小,流量消耗非常地小。电量方面,JPush Android SDK 经过持续地优化,尽可能减少不必要的代码执行;并且,长期的版本升级迭代,不断地调优,在保证一定的网络连接稳定性的要求小,减少电量消耗。而 Android 设备的网络的复杂性、不稳定性,是 Android 设备开发最复杂的地方之一。
关键点:
1.强烈建议大家上极光官网下载Android demo,里面有所需要的jar文件以及配置文件。配置正确的包名,获取项目的appKey值
2.极光推送通过广播来实现,所以Android客户端关键就是注册广播事件
3.建议在项目初始化Application的时候初始化JdPush(初始化过才可以进行推送服务)
4.这里我们实现全部用户推送和个别用户推送
下载官网demo然后部署,我们会看到如下效果
下面看具体的代码,点击initPush就是初始化JdPush。在具体项目中建议这一步在Application初始化的时候实现。初始化代码其实很简单
// 初始化 JPush。如果已经初始化,但没有登录成功,则执行重新登录。 private void init(){ JPushInterface.init(getApplicationContext()); }
广播MessageReceiver ,首先根据MESSAGE_RECEIVED_ACTION判断广播是否为当前广播,然后从广播中获取推送的内容
public class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) { String messge = intent.getStringExtra(KEY_MESSAGE); String extras = intent.getStringExtra(KEY_EXTRAS); StringBuilder showMsg = new StringBuilder(); showMsg.append(KEY_MESSAGE + " : " + messge + "\n"); if (!ExampleUtil.isEmpty(extras)) { showMsg.append(KEY_EXTRAS + " : " + extras + "\n"); } setCostomMsg(showMsg.toString()); } } }
注册广播的方法registerMessageReceiver,主要是registerReceiver(mMessageReceiver, filter)方法
public void registerMessageReceiver() { mMessageReceiver = new MessageReceiver(); IntentFilter filter = new IntentFilter(); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); filter.addAction(MESSAGE_RECEIVED_ACTION); registerReceiver(mMessageReceiver, filter); }
最后在onCreate方法中
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); registerMessageReceiver(); // used for receive msg }
ok,只要我们点击init按钮,日志里会显示初始化成功log。然后从后台推送一条服务过来,会看到日志显示如下信息
02-07 08:35:36.235: V/JPush(693): [JPushInterface] action:getPushNotificationBuilder : 002-07 08:35:36.275: D/PhoneStatusBar(276): addNotification score=002-07 08:35:36.325: D/JPush(693): [NotificationHelper] Send push received broadcast to developer defined receiver02-07 08:35:36.335: D/JPush(693): [MyReceiver] onReceive - cn.jpush.android.intent.NOTIFICATION_RECEIVED, extras: 02-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.MSG_ID, value:39958893502-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.ALERT, value:祝大家新春快乐02-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.NOTIFICATION_CONTENT_TITLE, value:JPush SDK Demo02-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.EXTRA, value:{}02-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.PUSH_ID, value:39958893502-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.NOTIFICATION_ID, value:39958893502-07 08:35:36.335: D/JPush(693): [MyReceiver] 接收到推送下来的通知02-07 08:35:36.335: D/JPush(693): [MyReceiver] 接收到推送下来的通知的ID: 39958893502-07 08:35:36.355: D/MediaPlayer(276): Couldn't open file on client side, trying server side
可以看到图片左上角图标就是提醒我们收到推送消息。
上面我们后台是面向全部操作平台(包括ANdorid,Ios)的所有用户推送内容,那么如何针对某一个用户推送内容呢?上一篇文章有提到过,我们需要设置别名(alias)。
ok,点击高级功能,会看到如下界面,并且我在alias里填入手机号码
具体设置别名(alias)的代码,可以看到是调用Handler来实现的
private void setAlias(){ EditText aliasEdit = (EditText) findViewById(R.id.et_alias); String alias = aliasEdit.getText().toString().trim(); if (TextUtils.isEmpty(alias)) { Toast.makeText(PushSetActivity.this,R.string.error_alias_empty, Toast.LENGTH_SHORT).show(); return; } if (!ExampleUtil.isValidTagAndAlias(alias)) { Toast.makeText(PushSetActivity.this,R.string.error_tag_gs_empty, Toast.LENGTH_SHORT).show(); return; } //调用JPush API设置Alias mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, alias)); }
handler里是调用如下代码设置alias值
case MSG_SET_ALIAS: Log.d(TAG, "Set alias in handler."); JPushInterface.setAliasAndTags(getApplicationContext(), (String) msg.obj, null, mAliasCallback); break;
然后我们就可以根据设置的alias值,结合第一篇博客后台服务器的设置方法,根据确定的别名进行推送。下面是上一篇博客中后台服务器对alias的设置
public static PushPayload buildPushObject_all_alias_alert() { return PushPayload.newBuilder() .setPlatform(Platform.android())//设置接受的平台 .setAudience(Audience.alias("18810923631"))//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到 .setNotification(Notification.alert(ALERT)) .build(); }
除了别名(alias)外,极光推送还提供了tag(标签),主要是针对特定的一组用户进行推送。还有设置推送时间以及设置通知栏样式,大家也可以研究。重要的还是明白其原理
最后再来看一下原理图
- 极光推送使用实例(二) Android客户端
- 极光推送使用实例(三) Android客户端
- 极光推送之服务器端向android等客户端推送实例
- 极光推送 使用实例 (一)服务端
- 极光推送 使用实例 (一)服务端
- 极光推送 使用实例 (一)服务端
- 极光推送 使用实例 (一)服务端
- Android 极光推送使用
- 极光推送开发(二)
- 【转载】极光推送 使用实例 (一)服务端
- 极光推送(二):自定义推送消息
- Android集成极光推送踩坑(二)升级篇
- 极光推送Jpush之RestAPI使用实例
- Android 极光推送(JPush)
- 使用极光推送做iOS客户端的推送
- 极光推送接入-客户端
- android消息推送---JPush(极光推送)
- 【Android推送】极光推送
- c++中冒号(:)和双冒号(::)的用法
- 黑马程序员------C语言-----结构体和枚举
- **Codeforces Round #250 (Div. 2) C. The Child and Toy ACM解题报告(贪心难题)
- 我是如何找实习 (or 工作)的
- UISegmentedControl的总结还不错!
- 极光推送使用实例(二) Android客户端
- 图的拓扑排序
- Spring+Hibernate+Struts2整合文档
- 获取照片库中所有照片
- 【日常学习】【语法】STL之set
- color.xml 中定义drawable和color的区别
- 思科CCNA第三学期第七章答案
- 浅谈 ACSII,Unicode 和 UTF-8
- jni总结