Android原生集成JPush SDK
因为小黑是一名Unity开发,所以Android Studio上有写的不对的地方请大佬们指出,再集成的时候,有问题的或者疑问的也可以直接提出。
目录
使用版本:
Android Studio 4.2.1 (以下简称AS)
JPush v4.0.6 (2021.06.23当天用的版本)
Unity 2020.3.12f1c1 (Android原生同学不用在意)
参考文档:极光推送 - Android SDK 集成指南 - 极光文档 (jiguang.cn)
接入JPush SDK
一:下载JPush的SDK
1、注册极光推送官网账号:
官网地址:首页 - 极光 (jiguang.cn)
2、下载Android的SDK:
在进入极光推送页面后,把页面往下滑,页面顶部会出现(体验Demo),点击进入。
接着我们创建自己的应用
递交信息
我们下一步
接着下一步后,我们点击下载SDK就可以了
下载完成后验证:是不是这三个文件,别的不管,主要是jiguang这个一定要存在才对,不然重新下载。
二、创建AS项目
我们一步一步的过,争取小黑自己再用的时候能直接成功,不打自己的脸。
1、导入SDK:
导入步骤:AndroidStudio -> File -> New -> Import Module -> 选择 jiguang 导入
2、配置SDK:
注意!一定要在主build.gradle下添加配置,不然可能不成功!!在吐槽一下,极光对于AS新手,那真的是太不友好了,也不知道学学友盟+的官方文档。。
jcenter()
mavenCentral()
我们按个来啊
1、settings.gradle下添加include ':jiguang' 没问题
2、对AS小白手,真正操蛋的地方来了,官网之说再module gradle中添加SDKmanifestPlaceholders依赖,但是他没说在那个module中,小黑的东西也多,就挨个尝试啊,最后我发现得到jiguang这个Libraries下的build.gradle里边添加才对,别的地方都会报错,淦!!。
manifestPlaceholders = [
JPUSH_PKGNAME : "包名",
JPUSH_APPKEY : "APP_KEY", //JPush 上注册的包名对应的 Appkey.
JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
MEIZU_APPKEY : "MZ-魅族的APPKEY",
MEIZU_APPID : "MZ-魅族的APPID",
XIAOMI_APPID : "MI-小米的APPID",
XIAOMI_APPKEY : "MI-小米的APPKEY",
OPPO_APPKEY : "OP-oppo的APPKEY",
OPPO_APPID : "OP-oppo的APPID",
OPPO_APPSECRET : "OP-oppo的APPSECRET",
VIVO_APPKEY : "vivo的APPKEY",
VIVO_APPID : "vivo的APPID"
]
3、然后把我们要用到推送的地方,哪一个模块用就在那个模块下的build.gradle中添加配置。
4、接着在implementation project(':jiguang')的同一个module中的AndroidManifest.xml中,添加配置,兵且按照要求,去继承该继承的类。
第一个类继承JCommonService,然后什么都不用管了。
package com.nativeai.pushai.push;
import cn.jpush.android.service.JCommonService;
public class PushService extends JCommonService { }
第二个类继承:JPushMessageReceiver,并且要重写函数,具体内容是直接看的他们对于Unity部分集成的程序,所以你们知道怎么用就好了, 不用纠结从哪来的。这个东西,你越纠结,你就越想骂极光SDK的文档,什么垃圾东西,就没个逻辑清晰人整理么!~
代码会放到下方,争取让AS小白也能迅速接入极光推送。
package com.nativeai.pushai.push;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import cn.jpush.android.api.CmdMessage;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;
public class PushReceiver extends JPushMessageReceiver {
private static final String TAG = "PushMessageReceiver";
@Override
public void onMessage(Context context, CustomMessage customMessage) {
Log.e(TAG, "[onMessage] " + customMessage);
}
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage message) {
Log.e(TAG, "[onNotifyMessageOpened] " + message);
}
@Override
public void onMultiActionClicked(Context context, Intent intent) {
Log.e(TAG, "[onMultiActionClicked] 用户点击了通知栏按钮");
String nActionExtra = intent.getExtras().getString(JPushInterface.EXTRA_NOTIFICATION_ACTION_EXTRA);
//开发者根据不同 Action 携带的 extra 字段来分配不同的动作。
if (nActionExtra == null) {
Log.d(TAG, "ACTION_NOTIFICATION_CLICK_ACTION nActionExtra is null");
return;
}
if (nActionExtra.equals("my_extra1")) {
Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮一");
}
else if (nActionExtra.equals("my_extra2")) {
Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮二");
}
else if (nActionExtra.equals("my_extra3")) {
Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮三");
}
else {
Log.e(TAG, "[onMultiActionClicked] 用户点击通知栏按钮未定义");
}
}
@Override
public void onNotifyMessageArrived(Context context, NotificationMessage message) {
Log.e(TAG, "[onNotifyMessageArrived] " + message);
}
@Override
public void onNotifyMessageDismiss(Context context, NotificationMessage message) {
Log.e(TAG, "[onNotifyMessageDismiss] " + message);
}
@Override
public void onRegister(Context context, String registrationId) {
Log.e(TAG, "[onRegister] " + registrationId);
//Intent intent = new Intent("com.jiguang.demo.register");
//context.sendBroadcast(intent);
}
@Override
public void onConnected(Context context, boolean isConnected) {
Log.e(TAG, "[onConnected] " + isConnected);
}
@Override
public void onCommandResult(Context context, CmdMessage cmdMessage) {
Log.e(TAG, "[onCommandResult] " + cmdMessage);
}
@Override
public void onTagOperatorResult(Context context, JPushMessage jPushMessage) {
Log.e("push: ",":-----------------: " + jPushMessage);
super.onTagOperatorResult(context, jPushMessage);
}
@Override
public void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {
Log.e("push: ",":-----------------: " + jPushMessage);
super.onCheckTagOperatorResult(context, jPushMessage);
}
@Override
public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
Log.e("push: ",":-----------------: " + jPushMessage);
super.onAliasOperatorResult(context, jPushMessage);
}
@Override
public void onMobileNumberOperatorResult(Context context, JPushMessage jPushMessage) {
Log.e("push: ",":-----------------: " + jPushMessage);
super.onMobileNumberOperatorResult(context, jPushMessage);
}
@Override
public void onNotificationSettingsCheck(Context context, boolean isOn, int source) {
super.onNotificationSettingsCheck(context, isOn, source);
Log.e(TAG, "[onNotificationSettingsCheck] isOn:" + isOn + ",source:" + source);
}
}
5、初始化SDK,开发的时候按照官方建议,把Debug开着。
这里给大家留个坑(极光也是留坑再说明的),后边填上~
JPushInterface.setDebugMode(true);
JPushInterface.init(getApplicationContext());
让我们查看结果:
安装查看log,首先是初始化成功了,那么我们接着检查是否能接收到推送
然后我们创建推送
这是网页上的,我们看看手机上效果,小米截屏没用明白,卡了个音量。。不要在意
可以看到,我们的推送消息成功了,并且极光官网也给了反馈,说你就一个目标,你推送成功了1个。。。All
6、点击推送内容,进入程序。
我们看log日志,要注意我标红的地方,一个是版本,一个是缺少东西。
小黑就可劲儿的看官方文档,反复看啊。也没发现说是我少集成什么了呀,怎么就缺少东西呢,反正看到推送的内容了,也就不管那么多了。
然后抱着尝试的心态,点击推送消息,结果App就崩了,日志都没有就崩了~~!你可知道小黑的绝望,小黑当时:满头问号?????
经过几次尝试后,放弃抵抗了,接着看官方文档吧,在翻阅了几篇后看到,初始化接口竟然换了,也就是之前JPushInterface.init接口可用性不大了,官网给你一个新的接口,叫做:JPushUPSManager.registerToken,淦!!为啥不写道一个文档中呢,或者给个URL可以点进去,大家可以快速知道!
于是小黑又看到了新希望,赶快去尝试一下,所以代码变成了,并且迫不及待地重新build,查看codema
JPushUPSManager.registerToken(
mUnityPlayer.getContext(),
"201b576a5aaea1d3107a5efe",
null,
null,
(code)->{ Log.e("---","Android 端 JPush初始化结果为: "+code.getReturnCode());
}
);
嘿嘿嘿嘿,像是官方说的,0为成功。
那既然成功了,我们接着发一条推送内容,这时候推送刚到,我们的onNotifyMessageArrived函数就接收到了信息
然后我们从状态栏点开推送内容,接着我们的onNotifyMessageOpened函数又收到了消息,哈哈哈啊哈哈哈哈哈。
至此:Android原生推送接入完毕
如果你们还需要别的操作,看一些官方的API文档,有些进阶教程之类的,但小黑也不知道如何啊。。
极光推送 - Android SDK API - 极光文档 (jiguang.cn)
如果是Unity的同学,每次接到信息后,我们不就可以直接去和Unity通信了吗,和Unity通信
结束
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,总算让我这个AS小白弄出来了,垃圾极光文档编写人!没忘了喷他,喷死他,对新手不友好的文档。。而且为啥B站视频只有IOS原生的,对Android有偏见嘛!!!!!等我开始搞IOS原生的时候,小黑我在酌情喷啊,但愿我能少费些口水。。。
好了,接入文档至此告一段落咯
唠家常
- 小黑的今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加小黑的QQ:841298494,大家一起进步。
今日无推荐
- 客官,看完get之后记得点赞哟!
- 小伙伴你还想要别的知识?好的呀,分享给你们
- 小黑的杂货铺,想要什么都有,客官不进来喝杯茶么?
Android原生集成JPush SDK的更多相关文章
- 《Android原生整合虹软SDK开发uniapp插件》
1.项目背景 应公司要求,需要开发一套类似人脸打卡功能的app,但是因为我们公司没有很强的原生android开发者,所以根据现状选择了第三方跨平台的uniapp,想必目前大多人都了解这个平台了,我也就 ...
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...
- Android消息推送 SDK 集成指南
使用提示 本文是 Android SDK 标准的集成指南文档. 匹配的 SDK 版本为:r1.8.0及以后版本. 本文随SDK压缩包分发.在你看到本文时,可能当前的版本与本文已经不是很适配.所以建议关 ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- Android集成JPush极光推送
推送原理 参考网址:https://blog.csdn.net/huangli1466384630/article/details/79889473 SDK下载 https://docs.jiguan ...
- Android集成JPush(极光推送)
目前只是简单的集成 1.在极光推送官网注册用户 2.创建应用 3.配置包名,获得APPKEY 去设置 输入应用包名 确定然后返回查看APPKEY 3.在应用中集成极光推送 用的jcenter自动集成的 ...
- Springboot项目集成JPush极光推送(Java SDK)
1.由于项目的需求,需要在Android APP上实现消息推送功能,所以引用了极光推送(官网:https://www.jiguang.cn/, 文档:http://docs.jiguang.cn/) ...
- 将React Native集成至Android原生应用
将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...
- AndroidStudio离线打包MUI集成JPush极光推送并在java后端管理推送
1.AndroidStudio离线打包MUI 如何离线打包请参看上篇随笔<AndroidStudio离线打包MUI> 2.集成极光推送 官方文档:https://docs.jiguang. ...
随机推荐
- 图文详解丨iOS App上架全流程及审核避坑指南
App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都"死"在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流 ...
- 测试开发mysql性能调优总结(一)
测试开发mysql性能调优总结 mysql在创建表的时候,对每个字段选择合适的数据类型很重要! 根据个人的经验总结: 整数类型选择 INT小数类型选择 DECIMAL字符串类型选择 TEXT日期时间选 ...
- 浅谈HTTP缓存与CDN缓存的那点事
HTTP缓存与CDN缓存一直是提升web性能的两大利器,合理的缓存配置可以降低带宽成本.减轻服务器压力.提升用户的体验.而不合理的缓存配置会导致资源界面无法及时更新,从而引发一系列的衍生问题.本文将分 ...
- Containerd 如何配置 Proxy?
前言 在某些 air gap 场景中,往往需要离线或使用代理 (Proxy), 例如: 需要通过 Proxy pull 容器镜像: Docker Hub: docker.io Quay: quay.i ...
- Centos 7.6 安装部署 openGauss 3.1.0 企业版一主两备集群
一.安装环境设置 1.1 硬件环境 名称 最低配置 建议配置 测试配置 服务器数量 3 略 略 硬盘 * 至少1GB用于安装openGauss的应用程序.* 每个主机需大约300MB用于元数据存储.* ...
- C++快速幂
C++快速幂 快速幂的作用: 当我们做一些高次幂的计算时,就不能直接进行暴力的计算.例如:需要计算2^n 并且n≤10^18.这时候如果我们直接进行暴力的计算,时间复杂度为O ( n ),那么肯定会超 ...
- 快捷打开cmd管理员模式
win+s-搜索cmd 直接回车:普通用户模式的cmd CTRL+SHIFT+回车:管理员模式的cmd
- #define 的神奇操作
# define 的神奇操作 一.宏定义中的 #.## 符号的神奇用法 1.1 # 的用法 1.1.1 作用 #表示字符串化操作符(stringification),其作用是将宏定义中的传入参数名转换 ...
- 【每日一题】【链表&头插法&ASCII码】【链表&迭代器】2022年1月28日-NC1 大数加法
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回. 思路:原生链表&头插法节点值 import java.util.*; public class Solution ...
- 【JVM】经典垃圾回收器
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 转载请在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益.让我们一起维护 ...