Escenas
A menudo, existen servicios en segundo plano que envían notificaciones a Android.
lograr
Primero cree una nueva aplicación de Android en Android Studio
Jcenter está configurado en build.gradle del directorio raíz del proyecto y el soporte está configurado de forma predeterminada
Luego agregue las dependencias relevantes en el build.gradle de la aplicación debajo del módulo
implementation 'cn.jiguang.sdk:jpush:3.3.4' // 此处以JPush 3.3.4 版本为例。
implementation 'cn.jiguang.sdk:jcore:2.1.0' // 此处以JCore 2.1.0 版本为例。
Agregue la ubicación de la siguiente manera
Luego reemplace las variables en el manifiesto
defaultConfig {
applicationId "com.badao.pushdemo"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ndk {
//选择要添加的对应cpu类型的.so库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "Push上注册的包名对应的appkey", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
]
}
Ubicación de reemplazo
Preste atención a dos lugares aquí:
applicationId es el mismo nombre de paquete cuando crea una nueva aplicación en la plataforma de desarrollo Jiguang.
Entonces, JPUSH_APPKEY a continuación es la clave de aplicación correspondiente de la aplicación recién creada
Luego abra el archivo AndroidManifest.xml del proyecto para agregar permisos
<!-- Required -->
<permission
android:name="com.badao.pushdemo.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
<!-- Required -->
<uses-permission android:name="com.badao.pushdemo.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"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional. Required for location feature -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<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_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.VIBRATE" />
Tenga en cuenta que el nombre del paquete delante del primer permiso aquí debe ser el mismo
Luego registre otro servicio que herede JCommonService en AndroidManifest.xml
<!-- 注册继承JCommonService的服务 -->
<service
android:name=".PushService"
android:enabled="true"
android:exported="false"
android:process=":pushcore">
<intent-filter>
<action android:name="cn.jiguang.user.service.action" />
</intent-filter>
</service>
Luego cree un nuevo PushService en la ruta del paquete
el código se muestra a continuación
package com.badao.pushdemo;
import cn.jpush.android.service.JCommonService;
public class PushService extends JCommonService {
}
Luego, personalice un receptor en AndroidManifest.xml para reemplazar el receptor push nativo de Jiguang
<!-- 替换原生极光推送接收器 -->
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" />
<category android:name="com.badao.pushdemo" /> <!--JPush上注册的包名 -->
</intent-filter>
</receiver>
Tenga en cuenta que el nombre del paquete aquí es el mismo que el registrado en JPush
Luego cree un nuevo MyReceiver en la ruta del paquete
Modifique el código de la siguiente manera
package com.badao.pushdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import cn.jpush.android.api.CustomMessage;
import cn.jpush.android.api.JPushMessage;
import cn.jpush.android.api.NotificationMessage;
import cn.jpush.android.service.JPushMessageReceiver;
public class MyReceiver extends JPushMessageReceiver {
private static final String TAG = "JIGUANG";
private Intent intent;
@Override
public void onConnected(Context context, boolean b) {
super.onConnected(context, b);
Log.e(TAG, "onConnected");
}
@Override
public void onRegister(Context context, String s) {
super.onRegister(context, s);
Log.e(TAG, "onRegister" + s);
}
@Override
public void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {
Log.i("bieming","bieming:"+jPushMessage.getAlias());
super.onAliasOperatorResult(context, jPushMessage);
Log.e(TAG, jPushMessage.toString());
}
/**
* 可以利用附加字段(notificationMessage.notificationExtras)来区别Notication,指定不同的动作,附加字段是个json字符串
* 通知(Notification),指在手机的通知栏(状态栏)上会显示的一条通知信息
*/
@Override
public void onNotifyMessageArrived(Context context, NotificationMessage notificationMessage) {
super.onNotifyMessageArrived(context, notificationMessage);
Log.e(TAG, notificationMessage.toString());
}
/**
* notificationMessage.notificationExtras(附加字段)的内容处理代码
* 比如打开新的Activity, 打开一个网页等..
*/
@Override
public void onNotifyMessageOpened(Context context, NotificationMessage notificationMessage) {
super.onNotifyMessageOpened(context, notificationMessage);
Log.e(TAG, notificationMessage.notificationExtras);
Intent intent = new Intent(context, MainActivity.class);
context.startActivity(intent);
}
/**
* 自定义消息不是通知,默认不会被SDK展示到通知栏上,极光推送仅负责透传给SDK。其内容和展示形式完全由开发者自己定义。
* 自定义消息主要用于应用的内部业务逻辑和特殊展示需求
*/
@Override
public void onMessage(Context context, CustomMessage customMessage) {
super.onMessage(context, customMessage);
Log.e(TAG, "onMessage");
}
}
Anule algunos métodos en el receptor personalizado para implementar devoluciones de llamada relacionadas
Luego inicialice Jpush en MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化极光推送
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
if (!isNotificationEnabled(this)) {
gotoSet();//去设置开启通知
} else {
//当前app允许消息通知
}
}
Luego, juzgue si desea configurar la notificación para que se active más tarde, donde
//是否允许通知
private boolean isNotificationEnabled (Context context){
boolean isOpened = false;
try {
isOpened = NotificationManagerCompat.from(context).areNotificationsEnabled();
} catch (Exception e) {
e.printStackTrace();
isOpened = false;
}
return isOpened;
}
luego
//去设置允许通知
private void gotoSet () {
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= 26) {
// android 8.0引导
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("android.provider.extra.APP_PACKAGE", getPackageName());
} else if (Build.VERSION.SDK_INT >= 21) {
// android 5.0-7.0
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", getPackageName());
intent.putExtra("app_uid", getApplicationInfo().uid);
} else {
// 其他
intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
intent.setData(Uri.fromParts("package", getPackageName(), null));
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
Luego ejecute el proyecto, inicie sesión en Jiguang Developer Platform para encontrar el mensaje push
La premisa es realizar las siguientes operaciones
Busque el servicio de desarrollador en el sitio web oficial de Jpush e ingrese a la plataforma de desarrollador
Luego haga clic en crear aplicación
Establezca un nombre de paquete al crear una nueva aplicación, recuerde que este nombre de paquete se usará en el código
Luego seleccione el servicio push
Haga clic en Siguiente, y luego puede seleccionar el canal de proveedor que se integrará
Elija integrar Android
Luego, el funcionario proporciona documentación integrada y descargas y demostraciones del SDK. Cuando integramos en Android, podemos integrar las dependencias a través de jcenter. Una vez que se completa la nueva aplicación
Copie el nombre del paquete de la aplicación y AppKey,
El grupo objetivo elige a todos
Recibirás un empujón en la aplicación.
Empuje a través del dispositivo designado por configuración de alias
Lo anterior es para empujar todos los dispositivos, si necesita empujar al dispositivo especificado
Esto se puede lograr configurando el alias del dispositivo.
Preste atención a la diferencia con la etiqueta, la etiqueta es un tipo de dispositivo y el alias es el dispositivo designado
Primero agregue dos botones en la página principal
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="注册别名"
tools:layout_editor_absoluteX="210dp"
tools:layout_editor_absoluteY="462dp" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="解除注册别名"
tools:layout_editor_absoluteX="210dp"
tools:layout_editor_absoluteY="462dp"
android:layout_below="@id/button1"/>
</RelativeLayout>
Luego, configure el evento de clic en onCreate en MainActivity para establecer el alias y eliminar el alias respectivamente.
//设置别名-一般在登录时
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
JPushInterface.setAlias(getApplicationContext(),0000000001,"badaodechengxvyuan");
Log.i("setAlias","setAlias");
}
});
//删除别名一般在注销登录时
findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
JPushInterface.deleteAlias(getApplicationContext(),0000000001);
Log.i("deleteAlias","deleteAlias");
}
});
El alias generalmente se establece cuando se inicia sesión en la aplicación
Luego, elimine el alias generalmente después de cerrar sesión e iniciar sesión. Aquí, el establecimiento del alias y la eliminación del alias se implementan mediante eventos de botón.
Luego inicie el proyecto y haga clic en el botón Registrar alias.
Además, onAliasOperatorResult en el receptor personalizado puede implementar devoluciones de llamada para el registro y eliminación de alias.
Luego inicie sesión en el fondo de desarrollador de Jiguang y configure el alias del dispositivo en la selección de destino en el mensaje push
Luego recibirá el empuje en el dispositivo de aplicación especificado
Luego puede ver en el registro que ha ingresado la devolución de llamada de la configuración de alias
Luego, haga clic en el botón Eliminar registro de alias nuevamente, luego el mensaje push no se recibirá en el dispositivo y se le solicitará en segundo plano de Jiguang Developer
Luego también salida en el método de devolución de llamada
Descarga de código de muestra
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15435342