Gradle
- 确认 android studio 的 Project 根目录的主 gradle 中配置了 jcenter 支持
buildscript {
repositories {
jcenter()
}
......
}
allprojects {
repositories {
jcenter()
}
}
- 在 module 的 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 {
......
implementation 'cn.jiguang.sdk:jpush:3.3.4' // 此处以JPush 3.3.4 版本为例。
implementation 'cn.jiguang.sdk:jcore:2.1.0' // 此处以JCore 2.1.0 版本为例。
......
}
Androidmanifest
<!-- 必要 -->
<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="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" />
- 如果使用的 JCore 是 2.0.0 及以上的版本,需要额外在 Androidmanifest 中配置一个Service,以在更多手机平台上获得更稳定的支持,示例如下。(JCore1.x版本不需要)
<!-- Since JCore2.0.0 Required SDK核心功能-->
<!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false -->
<!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 -->
<service android:name=".receiver.PushService"
android:enabled="true"
android:exported="false"
android:process=":pushcore">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service>
- 从JPush3.0.7开始,需要配置继承JPushMessageReceiver的广播,原来如果配了MyReceiver现在可以弃用
<!-- Required since 3.0.7 -->
<!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
<!-- 3.3.0开始所有事件将通过该类回调 -->
<!-- 该广播需要继承 JPush 提供的 JPushMessageReceiver 类, 并如下新增一个 Intent-Filter -->
<receiver
android:name=".receiver.PushMessageReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name= "com.tinease.zhuanyouhui"/>
</intent-filter>
</receiver>
Androidmanifest中配置的2个接收广播
- PushService 为了更多手机平台上获得更稳定的支持
package ......;
import cn.jpush.android.service.JCommonService;
public class PushService extends JCommonService
{
}
- PushMessageReceiver 接收自定义消息与用户点击通知
收到消息调用:onMessage() processCustomMessage()
用户点击通知:onNotifyMessageOpened()
package ...... ;
import android.content.Context;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;
public class PushMessageReceiver extends JPushMessageReceiver
{
/**
* 自定义消息
* 收到自定义消息由 onMessage 调用 processCustomMessage
* @param context
* @param customMessage
*/
@Override
public void onMessage(Context context, CustomMessage customMessage) {
processCustomMessage(context,customMessage);
}
/**
* 自定义消息
*/
private void processCustomMessage(Context context, CustomMessage customMessage) {
System.out.println("极光 自定义消息"+customMessage.message);
// 所有附加信息 customMessage.toString();
// 其中 customMessage.extra; 是一个Json字符
}
/**
* 收到通知 自动显示在通知栏
* 用户点击后才调用此方法
* @param context
* @param message
*/
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage message) {
System.out.println("极光 通知栏 "+message);
// 所有附加信息 message.toString();
// 其中 message.notificationExtras; 是一个Json字符
try{
//打开自定义的Activity
/*Intent i = new Intent(context, TestActivity.class);
Bundle bundle = new Bundle();
bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,message.notificationTitle);
bundle.putString(JPushInterface.EXTRA_ALERT,message.notificationContent);
i.putExtras(bundle);
//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
context.startActivity(i);*/
}catch (Throwable throwable){
}
}
}
初始化,设置别名、标签
// Application中初始化
JPushInterface.setDebugMode(true); //开启调试
JPushInterface.init(this);
//设置别名
JPushInterface.setAlias(Context context, int sequence, String alias);
//设置、删除、清空标签
JPushInterface.setTags(Context context, int sequence,Set<String> tags);
JPushInterface.deleteTags(Context context, int sequence,Set<String> tags);
JPushInterface.cleanTags(Context context, int sequence);
混淆
-dontoptimize
-dontpreverify
-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-keep class * extends cn.jpush.android.helpers.JPushMessageReceiver { *; }
-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }
网友评论