android极光推送初步了解
推送可以及时,主动的与用户发起交互
(1)继承jar包,照示例AndroidManifest.xml添加.
(2)自定义MyApp继承自Application,在onCreate方法中调用JPushInterface.init(MainActivity.this);
或者在Activity的onCreate中调用.
(3)另外,在activity的onResume方法要调用JPushInterface.onResume(this);否则,推送不会出现,
在onPause中调用JPushInterface.onPause(this);
这样,可以通过服务器往安装了App的所有用户发送一条推送.
通过Alias往客户端发送信息.
在客户端的onCreate中
JPushInterface.setAlias(MainActivity.this, "aa", new TagAliasCallback() {
@Override
public void gotResult(int arg0, String arg1, Set<String> arg2) {
Log.e("info",arg1+"-----------");
//arg1是tag
}
});
这句就是将"aa"当成该设备的别名,达到往指定客户端发送消息的目的.
别名和签名设置的异常处理
有时会因为网络原因,有一定几率设置别名或标签失败.
privatevoidsetAlias() {
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;
}
// 调用 Handler 来异步设置别名
mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, alias));
} privatefinalTagAliasCallback mAliasCallback =newTagAliasCallback() { @Override publicvoidgotResult(intcode, String alias, Set<String> tags) { String logs ; switch(code) { case: logs ="Set tag and alias success"; Log.i(TAG, logs); break; case: logs ="Failed to set alias and tags due to timeout. Try again after 60s."; Log.i(TAG, logs); mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias),*); break; default: logs ="Failed with errorCode = "+ code; Log.e(TAG, logs); } ExampleUtil.showToast(logs, getApplicationContext()); }
}; privatestaticfinalintMSG_SET_ALIAS =; privatefinalHandler mHandler =newHandler() { @Override publicvoidhandleMessage(android.os.Message msg) { super.handleMessage(msg); switch(msg.what) { caseMSG_SET_ALIAS: Log.d(TAG,"Set alias in handler."); // 调用 JPush 接口来设置别名。 JPushInterface.setAliasAndTags(getApplicationContext(), (String) msg.obj,null, mAliasCallback); break; default: Log.i(TAG,"Unhandled msg - "+ msg.what); } }
};
自定义通知栏的样式
自定义样式放在init()之后.
CustomPushNotificationBuilder builder=new CustomPushNotificationBuilder(MainActivity.this, R.layout.my_push, R.id.iv_push, R.id.tv_title, R.id.tv_content);
builder.statusBarDrawable=R.drawable.ic_category_2;//最顶层状态栏小图标
builder.layoutIconDrawable=R.drawable.ic_category_2; //下拉状态时显示的通知图标.
JPushInterface.setPushNotificationBuilder(2, builder);
JPushInterface.setDefaultPushNotificationBuilder(builder); //设置该对话框为默认
.自定义消息:
所接收的消息不再局限于Notification,而是可以直接取出消息中的内容,从而用自己的方式显示给用户.
此时需要自定义一个MyReceiver继承自BroadcastReceiver.
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
Bundle bundle =intent.getExtras(); //接受到消息
Log.e("info", "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
Log.d("info", "[MyReceiver] 接收Registration Id : " + regId);
//send the Registration Id to your server...
} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
Log.d("info", "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
// processCustomMessage(ctx, bundle);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
Log.d("info", "[MyReceiver] 接收到推送下来的通知");
int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
Log.d("info", "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
Log.d("info", "[MyReceiver] 用户点击打开了通知");
JPushInterface.reportNotificationOpened(ctx, bundle.getString(JPushInterface.EXTRA_MSG_ID));
// //打开自定义的Activity
Intent i = new Intent(ctx, TwoActivity.class);
i.putExtras(bundle);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(i);
}
}
// 打印所有的 intent extra 数据
private static String printBundle(Bundle bundle) {
StringBuilder sb = new StringBuilder();
for (String key : bundle.keySet()) {
if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
sb.append("/nkey:" + key + ", value:" + bundle.getInt(key));
} else {
sb.append("/nkey:" + key + ", value:" + bundle.getString(key));
}
}
return sb.toString();
}
在类中接收完消息后,还需要在AndroidManifest.xml中添加
<!--自定义接收 -->
<receiver
android:name="com.lj.pushdemo1.MyReceiver"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<category android:name="com.lj.pushdemo1" />
</intent-filter>
</receiver>
获取 RegistrationID API
集成了JPush SDK的应用程序第一次注册到JPush服务器时,服务器会返回一个唯一的该设备的标识:RegistertionID.
String id=JPushInterface.getRegistrationID(MainActivity.this);
调用网络接口来发送消息

sendno:发送的编号.
app_key: 应用程序的appKey
receiver_type:接受者的类型 ----2.指定tag----3.指定alias----4.广播----5.根据registrationId进行推送.
msg_content:发送的内容,在这里必须要JSON格式.
platform:要发送的平台
verfication_code:将sendno+receiver_typ+receiver_values+API MasterSecret(在应用的详细信息里面)字符串拼接起来后,用md5加密
设置保留最近通知条数 API
JPushInterface.init(context); JPushInterface.setLatestNotificationNumber(context,);保留最近的3条
android极光推送初步了解的更多相关文章
- Android 极光推送造成IM服务绑定失败bug
由于极光推送对8.0的支持问题,升级到了最新版本的极光推送.但是最新版本的极光推送,默认将推送服务设置到了新的进程里面,由此引发 Android 极光推送多进程造成的application运行两次 和 ...
- 【android极光推送】—从客户端到后台,一文通吃
sion android:name="android.permission.VIBRATE" /> <uses-permission android:name=&quo ...
- android极光推送
版权声明:本文为博主原创文章,未经博主允许不得转载. Android开发记录18-集成推送服务的一点说明 关于推送服务,国内有很多选择,笔者也对它们进行了一个详细的对比,一般我们产品选择推送服务主要考 ...
- Android 极光推送JPush---自定义提示音
极光推送提供三种方法实现Notification通知 三方开发平台发送普通消息,客户端设置PushNotificationBuilder,实现基础的Notification通知 三方开放平台发送普通消 ...
- Android 极光推送集成
集成Jpush 1.用Android Studio创建一个Demo 2.创建激光推送开发者账号,要创建极光推送开发者帐号,请访问极光推送官方网站https://www.jiguang.cn/push ...
- android 极光推送 声音与振动 的关闭和开启
前言:最近刚好在写一些推送方面的东西,又是新手,不断在网上找资料,很少,不过还是找到了一些,反正百度我是再也不想百度了,谷歌一下子就能找到想要的. 废话不多说. 1.主要方法就是如下一个函数 priv ...
- .net平台借助第三方推送服务在推送Android消息(极光推送)
最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS ...
- 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言
在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...
- Android实现点击通知栏后,先启动应用再打开目标Activity ,极光推送等推送的也可以参考一下(转)
我因为项目中集成了极光推送,推送的通知栏点开需要确定进入哪个界面就参考了这边文章,感谢作者的无私. 标签: 情况简述 在开发Android app的过程中,遇到这样一个需求:app中启动一个Servi ...
随机推荐
- 模拟Excel同一列相同值的单元格合并
背景 项目中有一个查询工作量,可以将查询的结果导出到Excel表中.在Excel工具中,有一个合并居中功能,可以将选中的单元格合并成一个大的单元格.现在需要在程序中直接实现查询结果的汇总, 问题分析 ...
- 常用排序算法--java版
package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sor ...
- ssl证书验证的问题
对于https请求,是需要ssl证书验证的请求的,所以如果在请求时如果不带ssl证书,那么可以忽略证书的验证 有三种方法去实现: 1.Requests请求: 在文档中可以看到:http://docs. ...
- 【week2】Scrum中的站立会议
Scrum站立会议 站立会议给我的第一印象就是站着开会,在经过我查阅资料之后,发现也是差不多的意思.学术一点的分析就是在Sprint开始后,团队将会在每个工作日特定时间举行一个简短会议,每次会议 ...
- 某一线互联网公司前端面试题总结css部分
1,css3选择器 :not(selector) 选择页面内所有type!=text的类型: input:not([type=text]){ color: red; font-weight: bold ...
- 最近面试js部分试题总结
二,JavaScript面试题总结 1,首先是数组去重算法:给一个数组,去掉重复值 (function() { var arr = [1, 2, 3, 3, 4, ]; function unique ...
- node中的path.resolve
path.resolve([arg1,arg2,...])根据参数的不同,返回值存在两种情况. 以下为参数的两种情况: 1.每个参数都不带'/',比如path.resolve(),或者path.res ...
- Runtime之IMP指针,isa指针
要了解 isa 指针先了解下类的定义在xcode中用快捷键Shift+Cmd+O 搜索objc.h 能看到类的定义:了解 Paste_Image.png 可以看出:objc_object:Object ...
- BZOJ 1786 配对(DP)
如果我们直接令dp[i][j]为前i个位置第i个位置填j所产生的逆序对的最少数.这样是不满足无后效性的. 但是如果发现对于两个-1,如果前面的-1填的数要大于后面的-1填的数.容易证明把他们两交换结果 ...
- 【bzoj1131】[POI2008]Sta 树形dp
题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...