极光推送使用实例(二) Android客户端
上一篇简单介绍了极光推送在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);
}
1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
最后在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 : 0
02-07 08:35:36.275: D/PhoneStatusBar(276): addNotification score=0
02-07 08:35:36.325: D/JPush(693): [NotificationHelper] Send push received broadcast to developer defined receiver
02-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:399588935
02-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 Demo
02-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:399588935
02-07 08:35:36.335: D/JPush(693): key:cn.jpush.android.NOTIFICATION_ID, value:399588935
02-07 08:35:36.335: D/JPush(693): [MyReceiver] 接收到推送下来的通知
02-07 08:35:36.335: D/JPush(693): [MyReceiver] 接收到推送下来的通知的ID: 399588935
02-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客户端的更多相关文章
- Ionic JPush极光推送 插件实例
1.需要去这里注册https://www.jiguang.cn 注册成功获取AppKey 备注填写应用包名规范点,在项目还要用那 2.创建ionic 项目 指定你注册时候的包名(假如:com.ioni ...
- 极光推送和百度lbs android sdk一起使用使用proguard 混淆的问题
主要是http得类被混淆后,导致apk定位失败.经过确认,保留apache 的http类就好了 # To enable ProGuard in your project, edit project.p ...
- 极光推送配置(Android Studio),亲测有效
进行到这里就可以接收到通知了,但是如果你还想根据接收的消息做点什么 step8: public class MyReceiver extends BroadcastReceiver { private ...
- JPushDemo【极光推送集成,基于v3.1.8版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个Demo只是记录极光推送的集成,不能运行. 使用步骤 一.项目组织结构图 注意事项: 1. 导入类文件后需要change包名以 ...
- java SDK服务端推送 --极光推送(JPush)
网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...
- 【android极光推送】—从客户端到后台,一文通吃
sion android:name="android.permission.VIBRATE" /> <uses-permission android:name=&quo ...
- 【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)
作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- ...
- Android 极光推送JPush---自定义提示音
极光推送提供三种方法实现Notification通知 三方开发平台发送普通消息,客户端设置PushNotificationBuilder,实现基础的Notification通知 三方开放平台发送普通消 ...
- Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...
随机推荐
- 出现错误:Unable to load configuration. - action - file:/E:/Java/Tomcat7.0/apache-tomcat-7.0.68-windows-x64/apache-tomcat-7.0.68/webapps/SSH2Integrate/WEB-INF/classes/struts.xml:8:43
严重: Exception starting filter struts2 Unable to load configuration. - action - file:/E:/Java/Tomcat7 ...
- 使用静态变量的方法求n!
下面的程序可以输出1-5的阶乘值,如果需要把5改为n,则可求出1-n的阶乘值. void main() { setvbuf(stdout,NULL,_IONBF,); int fac(int n); ...
- PHP字符串函数之 strstr stristr strchr strrchr
strstr -- 查找字符串的首次出现,返回字符串从第一次出现的位置开始到该字符串的结尾或开始. stristr -- strstr 函数的忽略大小写版本 strchr -- strstr 函数的别 ...
- poj 3067 Japan(线段树?,神奇卡时代码,暂未完)
题目 //暴力的,没什么算法的,被琪琪视为傻逼的代码: //照者学长的神奇幸运卡时代码,虽然能AC,但是中途wa,tle了那么多次,啥也不想说了 //学长威武,能想出sum必须要是—— __int64 ...
- SQL事物用法【转】
SQL事务 一.事务概念 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.因此事务是一个不可分割的工作逻辑单元.在数据库系统上执行并发操作时事务是作为 ...
- maven_Error building POM (may not be this project's POM)错误
如果maven项目在执行编译等操作时报如题错误的话,请仔细检查pom.xml,一般是由pom的语法错误导致的,例如我的项目是因为: dependencies 元素下不应该有properties元素导致 ...
- Linux Versus Windows, Ubuntu/Mint V XP/Vista/7
原文:http://petermoulding.com/linux_versus_windows_ubuntu_mint_v_xp_vista_7 Linux Versus Windows, Ubun ...
- lintcode:三数之和
题目 三数之和 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组. 样例 如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集 ...
- lintcode:Remove Element 删除元素
题目: 删除元素 给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度. 元素的顺序可以改变,并且对新的数组不会有影响. 样例 给出一个数组 [0,4,4,0,0,2,4,4],和值 4 ...
- SendMessage、PostMessage原理
SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...