JpushをAndroidに統合して、プッシュメッセージ通知を実現し、エイリアス指定に従ってプッシュします。サンプルコードのダウンロードを添付

シーン

多くの場合、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

おすすめ

転載: blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114016288