Android客户端极光,极光推送使用实例(二) 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然后部署,我们会看到如下效果

2a8858ec32ddb6bb7681e7c422d6ac8d.png

下面看具体的代码,点击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

a8779d60cb0ba68cc31956b30fe8c3be.png

可以看到图片左上角图标就是提醒我们收到推送消息。

上面我们后台是面向全部操作平台(包括ANdorid,iOS)的所有用户推送内容,那么如何针对某一个用户推送内容呢?上一篇文章有提到过,我们需要设置别名(alias)。

ok,点击高级功能,会看到如下界面,并且我在alias里填入手机号码

1ae8514cb464f729c5f7907efe6420e6.png

具体设置别名(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(标签),主要是针对特定的一组用户进行推送。还有设置推送时间以及设置通知栏样式,大家也可以研究。重要的还是明白其原理

最后再来看一下原理图

f832ea3e6a08d8f0025f165c3b2c2123.png

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" />

【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.推 ...

随机推荐

POJ 1273 网络流(最大流)模板

http://poj.org/problem?id=1273 这道题很值得反思,弄了一下午,交上去先是一直编译错误,而在本地运行没有问题, 原因可能是oj的编译器版本老旧不支持这样的写法 G[from ...

分数try catch

要求:编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”.“及格”.“中”.“良”.“优”的结论.要求程序必须具备足够的健壮性,不管用户输入什 么样的内容 ...

铺地毯 2011年NOIP全国联赛提高组

题目描述 Description 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有n 张地毯,编号从1 到n.现在将这些地毯按照编号从 ...

[D3] 2. Basics of SVG

1. svg should use 'fill' prop instead 'background-color'2. svg width & height no need 'px'3. att ...

HttpContext.Cache和Application的区别

原文:HttpContext.Cache和Application的区别 (转载)   应用程序级的Cache和Application用户会话级的Session application的缺点是在读取时最 ...

Mapreduce参数调节

http://blog.javachen.com/2014/06/24/tuning-in-mapreduce/ 本文主要记录Hadoop 2.x版本中MapReduce参数调优,不涉及Yarn的调优 ...

ASP.NET Core Web 资源打包与压缩

本文将介绍使用的打包和压缩的优点,以及如何在ASP.NET Core应用程序中使用这些功能. 概述 在ASP.Net中可以使用打包与压缩这两种技术来提高Web应用程序页面加载的性能.通过减少从服务器请 ...

CentOS下安装Jenkins(Docker/war/tomcat/java -jar)

参考官方提供的安装教程:https://jenkins.io/doc/book/installing/,可以发现官方推荐使用Docker进行安装.虽然用Docker有很多好处,但也有缺点. 下面是各种 ...

asp.net EF框架执行原生SQL语句

1.执行无参数sql: string sql = "select * from IntegralInfo where convert(nvarchar,getdate(),23)='{0}' ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值