Scènes
Il existe souvent des services d'arrière-plan qui transmettent des notifications à Android.
atteindre
Créez d'abord une nouvelle application Android dans Android Studio
Jcenter est configuré dans le build.gradle du répertoire racine du projet et le support est configuré par défaut
Ajoutez ensuite les dépendances pertinentes dans le build.gradle de l'application sous le module
implementation 'cn.jiguang.sdk:jpush:3.3.4' // 此处以JPush 3.3.4 版本为例。
implementation 'cn.jiguang.sdk:jcore:2.1.0' // 此处以JCore 2.1.0 版本为例。
Ajoutez l'emplacement comme suit
Remplacez ensuite les variables dans le manifeste
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", //暂时填写默认值即可.
]
}
Lieu de remplacement
Faites attention à deux endroits ici:
applicationId est le même nom de package lorsque vous créez une nouvelle application sur la plate-forme de développement Jiguang.
Ensuite, la JPUSH_APPKEY ci-dessous est la clé d'application correspondante de l'application nouvellement créée
Ensuite, ouvrez le fichier AndroidManifest.xml du projet pour ajouter des autorisations
<!-- 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" />
Notez que le nom du package devant la première autorisation ici doit être le même
Enregistrez ensuite un autre service qui hérite de JCommonService dans 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>
Ensuite, créez un nouveau PushService sous le chemin du package
code montrer comme ci-dessous
package com.badao.pushdemo;
import cn.jpush.android.service.JCommonService;
public class PushService extends JCommonService {
}
Ensuite, personnalisez un récepteur dans AndroidManifest.xml pour remplacer le récepteur push Jiguang natif
<!-- 替换原生极光推送接收器 -->
<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>
Notez que le nom du package ici est le même que celui enregistré sur JPush
Ensuite, créez un nouveau MyReceiver sous le chemin du package
Modifiez le code comme suit
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");
}
}
Remplacez certaines méthodes dans le récepteur personnalisé pour implémenter les rappels associés
Puis initialisez Jpush dans 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允许消息通知
}
}
Ensuite, déterminez si vous souhaitez activer la notification ultérieurement, où
//是否允许通知
private boolean isNotificationEnabled (Context context){
boolean isOpened = false;
try {
isOpened = NotificationManagerCompat.from(context).areNotificationsEnabled();
} catch (Exception e) {
e.printStackTrace();
isOpened = false;
}
return isOpened;
}
ensuite
//去设置允许通知
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);
}
Ensuite, exécutez le projet, connectez-vous à la plateforme de développement Jiguang pour trouver le message push
Le principe est d'effectuer les opérations suivantes
Trouvez le service développeur sur le site officiel de Jpush et entrez dans la plateforme développeur
Cliquez ensuite sur créer une application
Définissez un nom de package lors de la création d'une nouvelle application, rappelez-vous que ce nom de package sera utilisé dans le code
Ensuite, sélectionnez le service push
Cliquez sur Suivant, puis vous pouvez sélectionner le canal de fournisseur à intégrer
Choisissez d'intégrer Android
Ensuite, le responsable fournit une documentation intégrée, des téléchargements et des démos du SDK. Lorsque nous intégrons dans Android, nous pouvons intégrer des dépendances via jcenter. Une fois la nouvelle application terminée
Copiez le nom du package d'application et AppKey,
Le groupe cible choisit tout le monde
Vous recevrez un push dans l'application
Passer à travers le périphérique désigné par paramètre d'alias
Ce qui précède consiste à pousser tous les périphériques, si vous devez pousser vers le périphérique spécifié
Cela peut être réalisé en définissant l'alias de l'appareil.
Faites attention à la différence avec l'étiquette, l'étiquette est un type d'appareil et l'alias est l'appareil désigné
Ajoutez d'abord deux boutons sur la page principale
<?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>
Ensuite, définissez l'événement de clic dans onCreate dans MainActivity pour définir l'alias et supprimer l'alias respectivement.
//设置别名-一般在登录时
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");
}
});
L'alias est généralement défini lorsque l'application est connectée
Ensuite, supprimez l'alias généralement après la déconnexion et la connexion. Ici, la définition de l'alias et la suppression de l'alias sont implémentées à l'aide d'événements de bouton.
Ensuite, démarrez le projet et cliquez sur le bouton Enregistrer un alias.
En outre, onAliasOperatorResult dans le récepteur personnalisé peut implémenter des rappels pour l'enregistrement et la suppression d'alias.
Ensuite, connectez-vous à l'arrière-plan du développeur Jiguang et définissez l'alias de périphérique dans la sélection cible dans le message push
Ensuite, vous recevrez le push dans l'appareil d'application spécifié
Ensuite, vous pouvez voir dans le journal que vous avez entré le rappel du paramètre d'alias
Ensuite, cliquez à nouveau sur le bouton d'enregistrement de suppression d'alias, le message push ne sera pas reçu sur l'appareil et il sera invité en arrière-plan de Jiguang Developer
Puis également sortie dans la méthode de rappel
Téléchargement d'un exemple de code
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15435342