Android冒险之旅-19-极光推送的简单使用

2023-12-21 10:30

本文主要是介绍Android冒险之旅-19-极光推送的简单使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

极光推送简介

  极光推送,英文简称 JPush,是一个面向普通开发者开放的,免费的第三方消息推送服务。

自动集成

1. 配置 jcenter 支持

在Project 级 build.gradle 中配置jcenter 支持。(新建 project 默认支持)

buildscript {repositories {jcenter()}......
}allprojects {repositories {jcenter()}
}

2. 添加依赖

在 module级的 build.gradle 中添加依赖和 AndroidManifest 的替换变量。

android {......defaultConfig {applicationId "com.xxx.xxx" //JPush 上注册的包名.......ndk {//选择要添加的对应 cpu 类型的 .so 库。abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'}manifestPlaceholders = [JPUSH_PKGNAME : applicationId,JPUSH_APPKEY : "你的 Appkey ", //JPush 上注册的包名对应的 Appkey.JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.]......}......
}dependencies {......compile 'cn.jiguang.sdk:jpush:3.8.6'  // 此处以JPush 3.8.6 版本为例。compile 'cn.jiguang.sdk:jcore:2.5.5'  // 此处以JCore 2.5.5 版本为例。......
}

3. 在Application中初始化

MyApplication.java

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//需在 init 之前调用,避免出现部分日志没打印的情况。多进程情况下建议在自定义的 Application 中 onCreate 中调用。JPushInterface.setDebugMode(true);  // 设置开启日志,发布时请关闭日志JPushInterface.init(this); // 初始化 JPush}
}

同时要在清单文件中配置

在这里插入图片描述

4. 自定义广播和服务类

MyJCommonService.class

/*** 自定义广播接收器* 增加极光的广播和服务类继承类* 服务就是为了让极光服务更加的坚挺,进程不被杀死。* 在清单文件中注册*/
public class MyJCommonService extends JCommonService {private static final String TAG = "MyJCommonService";//...
}

MyJPushMessageReceiver.class

/*** create by 星航指挥官* create on 2020/11/19* 不过是大梦一场空* 课不过是孤影照惊鸿*//** 状态回调* 接受极光添加标签呀接口呀注册成功失败的监听,里面可以重写很多办法,来进行获取操作返回的信息。* */
public class MyJPushMessageReceiver extends JPushMessageReceiver {private static final String TAG = "MyJPushMessageReceiver";/*** tag增删查改的操作会在此方法中回调结果*/@Overridepublic void onTagOperatorResult(Context context, JPushMessage jPushMessage) {super.onTagOperatorResult(context, jPushMessage);//下面2个回调类似
//        Log.e(TAG, "onTagOperatorResult查询得到的别名: " + jPushMessage.getAlias());
//        Log.e(TAG, "onTagOperatorResult查询得到的标签: " + jPushMessage.getTags());Log.e(TAG, "onTagOperatorResult错误码0为成功: " + jPushMessage.getErrorCode());
//        Log.e(TAG, "onTagOperatorResult传入的标示: " + jPushMessage.getSequence());//如果错误码为6002 请求超时的话 发送一个广播通知MainActivity重新设置别名和标签if (jPushMessage.getErrorCode()==6002){//新建广播Intent intent = new Intent();//设置动作intent.setAction("SetTagAndAlias");//发送广播context.getApplicationContext().sendBroadcast(intent);//日志提示Log.e(TAG, "onTagOperatorResult: 广播已发送");}}/*** 查询某个tag与当前用户的绑定状态的操作会在此方法中回调结果*/@Overridepublic void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {super.onCheckTagOperatorResult(context, jPushMessage);
//        Log.e(TAG, "onCheckTagOperatorResult错误码0为成功: " + jPushMessage.getErrorCode());}/*** alias相关的操作会在此方法中回调结果*/@Overridepublic void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {super.onAliasOperatorResult(context, jPushMessage);Log.e(TAG, "onAliasOperatorResult错误码0为成功: " + jPushMessage.getErrorCode());}/*** 收到自定义消息回调** @param context* @param customMessage*/@Overridepublic void onMessage(Context context, CustomMessage customMessage) {Log.e(TAG, "[onMessage]收到自定义消息回调" + customMessage);//处理自定义消息// processCustomMessage(context, customMessage);}/*** 收到通知回调** @param context* @param message*/@Overridepublic void onNotifyMessageArrived(Context context, NotificationMessage message) {Log.e(TAG, "[onNotifyMessageArrived]收到通知回调 " + message);}
}

5. 清单文件配置

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="qiyuan.lin.sky"><!-- Required --><permissionandroid:name="${applicationId}.permission.JPUSH_MESSAGE"android:protectionLevel="signature" /><!-- Required  一些系统要求的权限,如访问网络等--><uses-permission android:name="${applicationId}.permission.JPUSH_MESSAGE" /><uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--华为角标--><uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" /><!-- Optional for location --><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /><!-- Android Q后台定位权限--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /><applicationandroid:name=".common.MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!-- Since JCore2.0.0 Required SDK核心功能--><!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false --><!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 --><serviceandroid:name="qiyuan.lin.sky.jpush.MyJCommonService"android:enabled="true"android:exported="false"android:process=":pushcore"><intent-filter><action android:name="cn.jiguang.user.service.action" /></intent-filter></service><!-- Required since 3.0.7 --><!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 --><!-- 3.3.0开始所有事件将通过该类回调 --><!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter --><receiverandroid:name="qiyuan.lin.sky.jpush.MyJPushMessageReceiver"android:enabled="true"android:exported="false"><intent-filter><action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /><!-- 您应用的包名--><category android:name="${applicationId}" /></intent-filter></receiver></application></manifest>

6. 设置别名与标签

MainActivity.class

public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//经过测试  一上来就直接设置标签和别名总会报6002//先等4秒再设置基本能成功mHandler.sendEmptyMessageDelayed(100, 4000);//注册JPush报6002超时的广播 重新设置别名与标签initbroadcastReceiver();}/** 注册广播* */private void initbroadcastReceiver() {//注册JPush报6002超时的广播 重新设置别名与标签IntentFilter filter = new IntentFilter();filter.addAction("SetTagAndAlias");registerReceiver(broadcastReceiver6002, filter);}/** JPush报6002超时的广播 重新设置别名与标签* */BroadcastReceiver broadcastReceiver6002 = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {Log.e(TAG, "onReceive: 6002广播已收到");//重新设置别名与标签setBasicSetup(1);//查看一下别名与标签setBasicSetup(4);}};/*** 1-2-3-4* 增、删、改、查*/public void setBasicSetup(int type) {if (type == 1) {//设置别名(新的调用会覆盖之前的设置)
//            JPushInterface.setAlias(this, 0, "0x123");
//            Log.e(TAG, "setBasicSetup: 已设置别名");//设置标签(同上)JPushInterface.setTags(this, 0, setUserTags());Log.e(TAG, "setBasicSetup: 已设置标签");} else if (type == 2) {//删除别名JPushInterface.deleteAlias(this, 0);//删除指定标签JPushInterface.deleteTags(this, 0, setUserTags());//删除所有标签JPushInterface.cleanTags(this, 0);} else if (type == 3) {//增加tag用户量(一般都是登录成功设置userid为目标,在别处新增加比较少见)JPushInterface.addTags(this, 0, setUserTags());} else if (type == 4) {//查询所有标签JPushInterface.getAllTags(this, 0);//查询别名JPushInterface.getAlias(this, 0);//查询指定tag与当前用户绑定的状态(MyJPushMessageReceiver获取)JPushInterface.checkTagBindState(this, 0, "0x123");//获取注册idJPushInterface.getRegistrationID(this);}}/*** 标签用户*/private static Set<String> setUserTags() {//添加3个标签用户(获取登录userid较为常见)Set<String> tags = new HashSet<>();tags.add("0x412");tags.add("0x908");tags.add("0x201");return tags;}private final Handler mHandler = new Handler() {@Overridepublic void handleMessage(android.os.Message msg) {super.handleMessage(msg);if (msg.what == 100) {setBasicSetup(1);setBasicSetup(4);}}};@Overrideprotected void onDestroy() {super.onDestroy();//解绑广播unregisterReceiver(broadcastReceiver6002);}
}

服务端集成

SpringBoot服务端集成极光推送

End

这篇关于Android冒险之旅-19-极光推送的简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

Lipowerline5.0 雷达电力应用软件下载使用

1.配网数据处理分析 针对配网线路点云数据,优化了分类算法,支持杆塔、导线、交跨线、建筑物、地面点和其他线路的自动分类;一键生成危险点报告和交跨报告;还能生成点云数据采集航线和自主巡检航线。 获取软件安装包联系邮箱:2895356150@qq.com,资源源于网络,本介绍用于学习使用,如有侵权请您联系删除! 2.新增快速版,简洁易上手 支持快速版和专业版切换使用,快速版界面简洁,保留主

如何免费的去使用connectedpapers?

免费使用connectedpapers 1. 打开谷歌浏览器2. 按住ctrl+shift+N,进入无痕模式3. 不需要登录(也就是访客模式)4. 两次用完,关闭无痕模式(继续重复步骤 2 - 4) 1. 打开谷歌浏览器 2. 按住ctrl+shift+N,进入无痕模式 输入网址:https://www.connectedpapers.com/ 3. 不需要登录(也就是

19.手写Spring AOP

1.Spring AOP顶层设计 2.Spring AOP执行流程 下面是代码实现 3.在 application.properties中增加如下自定义配置: #托管的类扫描包路径#scanPackage=com.gupaoedu.vip.demotemplateRoot=layouts#切面表达式expression#pointCut=public .* com.gupaoedu

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现