由于在工作上可能会接触到相关的知识,所以这两天学习了一下极光推送的使用方法。学习过程中也遇到了不少的问题,所以就打算简单地总结一下。
那么,为什么我要接入极光推送呢?这里简单地回答一下这个问题。主要的原因是极光推送实现起来的消息推送时效性比较高,对于用户的手机的话也是省时省电;但如果是自己开发一个推送服务,简单开发可能会导致耗时耗电的问题,因为消息推送实现起来还是比较复杂的。个人或者小团体需要使用的话我感觉是没必要造轮子;大团队我感觉如有必要可以搞一搞。
此处笔记大多数来自于官方文档,如果内容上有出入的地方,请大家参考官方文档。
必备的环境:Android Studio,已经注册好的极光推送账号。
在Android Studio中创建一个项目,然后记录该项目的包名,假设这个包名是com.szu.weather。
在极光推送官网中创建一个应用,该过程会需要用到包名。不懂的话可以参考官网的详细步骤。创建应用成功后你就会得到一个AppKey,假设这个AppKey是g4u8ej62m7047000040aw5hd。
配置Module的gradle:这里一共需要填三个地方。
①在defaultConfig大括号中加入
ndk {
//选择要添加的对应 cpu 类型的 .so 库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
如图(图中的包名记得写一下,而不是什么xxx.xxx):
②在ndk的后面加入(这里的话你需要填你的AppKey,而不是我那个)
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "g4u8ej62m7047000040aw5hd",
JPUSH_CHANNEL : "developer-default",
]
加完后如图:
③在dependencies的大括号里面加入“cn.jiguang.sdk:jpush:5.0.3”。由于官方文档说从5.0.0版本开始可以自动拉取JCore包,所以我们就无需另外配置JCore了。加完后如图:
完成了③之后就不在需要通过jar包的方式导入极光推送第三方库了。
根据官方文档的推荐配置一个自定义的Service和自定义的Receiver。但切忌,这两个自定义的类需要声明为public,否则会出现闪退问题。我就是大意了,没加public,后边查到运行Android项目Unable to instantiate application, IllegalAccessException这篇文献才解决掉该问题。
①Service需要继承自cn.jpush.android.service.JCommonService,一开始不懂的话可以先空着这个文件。比如,
然后需要在AndroidManifest.xml文件中进行注册:
②Receiver需要继承自cn.jpush.android.service.JPushMessageReceiver。这个类和上面的Service差不多,一开始不懂也可以先空着。比如,
import cn.jpush.android.service.JPushMessageReceiver;
public class DemoReceiver extends JPushMessageReceiver {
}
但其实这个类是接收具体的推送消息的,你可以在这个类里面通过Bundle来对推行进行解析、二次利用。
相应地,AndroidManifest.xml文件也需要对该Receiver进行注册:
创建一个应用类,继承自android.app.Application,然后在其中的onCreate方法初始化推送服务,例如
import android.app.Application;
import android.content.Context;
import cn.jiguang.api.utils.JCollectionAuth;
import cn.jpush.android.api.JPushInterface;
public class XXXApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
JPushInterface.setDebugMode(true);
Context context = this;
JPushInterface.init(context);
JCollectionAuth.setAuth(context, true); //如初始化被拦截过,将重试初始化过程
}
}
该类也需要注册到AndroidManifest.xml文件之中
在AndroidManifest.xml文件中声明基本的权限,官方说必备的是
在MainActivity中记得请求权限,
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.os.Build;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermissions();
}
private void requestPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
}
}
}
一共涉及4个类(代码行数估计在50以内吧):
编译运行写的APP,授予权限、查看界面、查看通知栏,如图:
在极光推送平台中进行推送,点击“发送预览”,然后“确认发送”:
在手机APP上查看推送(点击推送就会消失、也没有其它动作,因为我在Receiver类中没有进行设置),如图:
1、Android快速接入 - 极光文档
2、极光推送的简单使用
最后再说一下吧。对于第三方库,我建议还是直接查看官方文档进行配置和使用,看别人的博客可能会使你遇到很多的坑,这里也包括我的博客。技术博客通常是具有时效性的,如果踩到坑了也不要生气,比较第三方库一直都在迭代更新,过去几年的博客不适用是很正常的事情。多看官方文档就好了,切记呀!