极光推送开发(二)

2024-05-07 11:58
文章标签 开发 推送 极光

本文主要是介绍极光推送开发(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

连接上一篇博文的内容。
开发好自定义的广播接收器之后,就可以在接收到推送到app的消息进行相应的处理。不过工作还没有完成,还有一些重要工作要做。

设置别名和标签

我们先看看Jpush官网对于别名和标签的描述。
http://docs.jpush.io/client/android_api/#api_1
这里是Jpush官网的android API,对于别名和标签的说明如下:
这里写图片描述

其实说白了,我的理解就是让jpush官网的消息推送服务器知道它要把消息推送给哪一个或者哪一些人手机app中。极光推送服务器就是通过别名和标签区别每一个使用开发者开发的app的用户的。有了这样的区别或者说是标识,激光推送就可以定向发送,甚至也可以批量发送。
理解了这一点,那么就可以着手设置别名和标签了。

public static void setAliasAndTags(Context context,
String alias,
Set tags,
TagAliasCallback callback)
这个接口同时设置别名和标签。

public static void setAlias(Context context, String alias, TagAliasCallback callback)
这个接口用于设置别名。

public static void setTags(Context context, Set tags, TagAliasCallback callback)
这个接口用于设置标签。
这三个接口都是jpush的工具包中的JPushInterface类下的静态方法,可以直接调用。

//这行代码即实现了设置别名和标签。由于别名和标签都是用于给
//Jpush服务器区分用户的,不一定非要同时设置别名和标签。也就是说
//只设置了别名也是可以的。并且也不要求别名和标签的唯一性。
//开发者可以根据自己的需要进行设置。
//例如 我只设置别名,并且别名是唯一的,只用给jpush服务器给哪些别名发送推送就可以了。
//或者说设置了别名并且唯一,但是根据标签进行了分组,同一个标签下面包含了多个别名,按照标签就可以实现群发功能了。
JPushInterface.setAliasAndTags(getApplicationContext(), “aliasAndTag”, null, mAliasCallback);/**
*TagAliasCallback类是JPush开发包jar中的类,用于
*设置别名和标签的回调接口,成功与否都会回调该方法
*同时给定回调的代码。如果code=0,说明别名设置成功。
**/
private final TagAliasCallback mAliasCallback = new TagAliasCallback() {@Overridepublic void gotResult(int code, String alias, Set<String> tags) {String logs ;switch (code) {case 0:logs = "Set tag and alias success";Log.i(TAG, logs);break;case 6002:logs = "Failed to set alias and tags due to timeout. Try again after 60s.";Log.i(TAG, logs);if (ExampleUtil.isConnected(getApplicationContext())) {mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60);} else {Log.i(TAG, "No network");}break;default:logs = "Failed with errorCode = " + code;Log.e(TAG, logs);}ExampleUtil.showToast(logs, getApplicationContext());}
};
/**
*6001   无效的设置,tag/alias 不应参数都为 null 
*6002   设置超时    建议重试
*6003   alias 字符串不合法    有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。
*6004   alias超长。最多 40个字节    中文 UTF-8 是 3 个字节
*6005   某一个 tag 字符串不合法  有效的别名、标签组成:字母(区分大小写)、数字、下划线、汉字。
*6006   某一个 tag 超长。一个 tag 最多 40个字节  中文 UTF-8 是 3 个字节
*6007   tags 数量超出限制。最多 100个 这是一台设备的限制。一个应用全局的标签数量无限制。
*6008   tag/alias 超出总长度限制。总长度最多 1K 字节   
*6011   10s内设置tag或alias大于3次 短时间内操作过于频繁
**/

那么还有一个问题,就是设置别名的时机,就是何时设置别名呢??
如果设置别名或者标签,并且想要设置唯一性,可以在使用app的用户成功登录之后进行设置。此时有关用户的登录名已经有了,可以给定用户的登录名或者userId这样具有唯一性的标识作为别名或者标签。
JPush官网并没有强制别名的设置时机,所以开发者根据需要进行设置即可。在本人开发的应用当中,是在用户自己根据用户名和密码成功登录之后,从后台获取到用户的信息之后,用userId来设置别名的。因为userId每个用户是不同的,具备唯一性,即使是群发,那么可以从app把要发送的用户的userId发送给后台,后台再把群发的userId提交给jpush服务器,然后jpush服务器向app推送消息。这样就完成了消息的推送,并且只推送到想要发送的用户的app端。经过这样的流程,想必各位已经知道了别名的用途了。

极光推送集成app中

上一篇博文中讲解了Receiver广播接收器、配置文件,这一篇讲解了别名,这些都懂了的情况下,就可以把这些集成到开发者自己开发的app中了。如何集成呢?还是有一些步骤的。
假设MainActivity 就是启动之后的主界面,代码如下:

public class MainActivity extends Activity{private static final int  GET_MSG_SUC = 0;private String TAG = MainActivity.class.getName();private static final int MSG_SET_ALIAS = 1001;@SuppressLint("HandlerLeak")private Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case GET_MSG_SUC:/***这里设置了别名,是因为了我开发的app中,是在这里获取的用户登录的信息*并且此时已经获取了用户的userId,然后就可以用用户的userId来设置别名了**/Log.i(TAG, "触发广播,接收到广播信息,说明必备数据获取成功");setAlias(Application.getInstance().getUserId());//设置极光推送的别名break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);initView();}void initView(){//判断当前手机网络状态的工具类,没什么特殊的,网上很多,就不详细写了NetWorkUtil net = new NetWorkUtil(getApplicationContext());if (!net.isNetWorkConnected()) {MyToast.showToast(MainActivity.this, "网络不可用,请连接网络");}else {// JPush初始化JPushInterface.setDebugMode(false); // 设置true 开启日志,发布时需关闭日志false即可JPushInterface.init(this); // 初始化 Jpush 固定的方法,JPushInterface类中的静态方法}}@Overrideprotected void onPause() {JPushInterface.onPause(MainActivity.this);super.onPause();}@Overrideprotected void onResume() {
//      极光推送服务会恢复正常工作JPushInterface.onResume(MainActivity.this);super.onResume();}/*** Jpush设置*/private void setAlias(int userId) {String alias = String.valueOf(userId);// 调用JPush API设置AliasmHandler2.sendMessage(mHandler2.obtainMessage(MSG_SET_ALIAS, alias));Log.d(TAG, "设置Jpush推送的别名alias=" + alias);}@SuppressLint("HandlerLeak")private final Handler mHandler2 = new Handler() {//专门用了一个Handler对象处理别名的注册问题@Overridepublic void handleMessage(android.os.Message msg) {super.handleMessage(msg);Log.d(TAG, "设置激光推送的别名-mHandler2");JPushInterface.setAliasAndTags(getApplicationContext(),(String) msg.obj, null, mAliasCallback);}};private final TagAliasCallback mAliasCallback = new TagAliasCallback() {@Overridepublic void gotResult(int code, String alias, Set<String> tags) {String logs;switch (code) {case 0:logs = "Set tag and alias success极光推送别名设置成功";Log.i(TAG, logs);break;case 6002:logs = "Failed to set alias and tags due to timeout. Try again after 60s.极光推送别名设置失败,60秒后重试";Log.i(TAG, logs);mHandler2.sendMessageDelayed(mHandler2.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60);break;default:logs = "极光推送设置失败,Failed with errorCode = " + code;Log.e(TAG, logs);break;}}};
}

这里只是示例了别名设置的时机和别名的注册。是不是很简单?确实不难。可能有人会问怎么没有Receiver广播接收器?这个开发者自定义的广播接收器我们已经在配置文件中配置好了是不是?广播接收器有两种配置方式,一种是在配置文件中进行配置,另一种实在代码中进行注册,并在onDestory中注销。但是jpush给定的AndroidManifest.xml示例中已经对开发者自定义的广播接收器进行了配置,所以在MainActivity中并没有对并广播接收器的注册。
当jpush服务器推送消息到客户端app,配置好的广播接收器会自动的响应,执行onReceive方法,根据类型进行处理。
这里请参考上一篇博文中MyReceiver类代码:http://blog.csdn.net/u010156024/article/details/43567143
至此全部完成了对jpush消息推送的处理工作。当然,jpush的功能还有很多,例如统计分析 API、清除通知 API、
设置允许推送时间 API、设置通知静默时间 API、通知栏样式定制 API、设置保留最近通知条数 API、富文本页面 Javascript 回调API、本地通知API等这些功能开发者都可以进行设置,把这些功能添加到自己的应用当中。
关于这些功能,请参考jpush官网api:http://docs.jpush.io/client/android_api/#api_8

本人水平有限,难免有疏漏之处,请各位不吝赐教!谢谢~~共同进步哈^_^

这篇关于极光推送开发(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967288

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来