シーン
多くの場合、Androidに通知をプッシュするバックグラウンドサービスがあります。
成し遂げる
まず、AndroidStudioで新しいAndroidアプリケーションを作成します
Jcenterはプロジェクトルートディレクトリのbuild.gradleで構成され、サポートはデフォルトで構成されます
次に、モジュールの下のアプリのbuild.gradleに関連する依存関係を追加します
implementation 'cn.jiguang.sdk:jpush:3.3.4' // 此处以JPush 3.3.4 版本为例。
implementation 'cn.jiguang.sdk:jcore:2.1.0' // 此处以JCore 2.1.0 版本为例。
次のように場所を追加します
次に、マニフェストの変数を置き換えます
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", //暂时填写默认值即可.
]
}
交換場所
ここで2つの場所に注意してください:
applicationIdは、Jiguang開発プラットフォームで新しいアプリケーションを作成するときと同じパッケージ名です。
次に、以下のJPUSH_APPKEYは、新しく作成されたアプリケーションの対応するアプリキーです。
次に、プロジェクトのAndroidManifest.xmlを開いて、権限を追加します
<!-- 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" />
ここでの最初の権限の前のパッケージ名は同じでなければならないことに注意してください
次に、JCommonServiceを継承する別のサービスを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>
次に、パッケージパスの下に新しいPushServiceを作成します
コードは以下のように表示されます
package com.badao.pushdemo;
import cn.jpush.android.service.JCommonService;
public class PushService extends JCommonService {
}
次に、AndroidManifest.xmlでレシーバーをカスタマイズして、ネイティブの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>
ここでのパッケージ名はJPushに登録されているものと同じですのでご注意ください
次に、パッケージパスの下に新しいMyReceiverを作成します
次のようにコードを変更します
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");
}
}
カスタムレシーバーの一部のメソッドをオーバーライドして、関連するコールバックを実装します
次に、MainActivityでJpushを初期化します
@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允许消息通知
}
}
次に、通知を後でオンにするように設定するかどうかを判断します。
//是否允许通知
private boolean isNotificationEnabled (Context context){
boolean isOpened = false;
try {
isOpened = NotificationManagerCompat.from(context).areNotificationsEnabled();
} catch (Exception e) {
e.printStackTrace();
isOpened = false;
}
return isOpened;
}
その後
//去设置允许通知
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);
}
次に、プロジェクトを実行し、Jiguang Developer Platformにログインして、プッシュメッセージを見つけます。
前提は以下の操作を行うことです
Jpush公式ウェブサイトで開発者サービスを見つけて、開発者プラットフォームに入ります
次に、[アプリの作成]をクリックします
新しいアプリケーションを作成するときにパッケージ名を設定します。このパッケージ名がコードで使用されることに注意してください。
次に、プッシュサービスを選択します
[次へ]をクリックすると、統合するベンダーチャネルを選択できます
Androidの統合を選択
次に、公式は統合されたドキュメントとSDKのダウンロードとデモを提供します。Androidに統合すると、jcenterを介して依存関係を統合できます。新しいアプリケーションが完了した後
アプリケーションパッケージ名とAppKeyをコピーして、
ターゲットグループは全員を選択します
あなたはアプリでプッシュを受け取ります
エイリアス設定で指定デバイスをプッシュスルー
上記は、指定されたデバイスにプッシュする必要がある場合、すべてのデバイスをプッシュすることです
これは、デバイスのエイリアスを設定することで実現できます。
ラベルとの違いに注意してください。ラベルはデバイスの一種であり、エイリアスは指定されたデバイスです。
まず、メインページに2つのボタンを追加します
<?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>
次に、MainActivityのonCreateでクリックイベントを設定して、エイリアスを設定し、エイリアスを削除します。
//设置别名-一般在登录时
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");
}
});
エイリアスは通常、アプリがログインしたときに設定されます
次に、通常、ログアウトとログインの後にエイリアスを削除します。ここでは、エイリアスの設定と削除は、ボタンイベントを使用して実装されます。
次に、プロジェクトを開始し、[エイリアスの登録]ボタンをクリックします。
さらに、カスタムレシーバーのonAliasOperatorResultは、エイリアスの登録と削除のためのコールバックを実装できます。
次に、Jiguang開発者のバックグラウンドにログインし、メッセージプッシュのターゲット選択でデバイスエイリアスを設定します
次に、指定されたアプリデバイスでプッシュを受け取ります
次に、エイリアス設定のコールバックを入力したことがログで確認できます。
次に、エイリアス登録の削除ボタンをもう一度クリックすると、プッシュメッセージがデバイスで受信されず、JiguangDeveloperのバックグラウンドでプロンプトが表示されます。
次に、コールバックメソッドにも出力します
サンプルコードのダウンロード
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15435342