Integre Jpush en Android para realizar notificaciones de mensajes push y push de acuerdo con la designación de alias. Descarga de código de muestra adjunta

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

Supongo que te gusta

Origin blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114016288
Recomendado
Clasificación