日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载

發布時間:2025/3/19 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

經常會有后臺服務向Android推送消息通知的情況。

實現

首先在Android Studio中新建一個Android應用

在Project根目錄的build.gradle中配置了jcenter,默認會配置支持

?

然后在module下app的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 版本為例。

添加位置如下

?

然后還是在這里面manifest替換變量

??? defaultConfig {applicationId "com.badao.pushdemo"minSdkVersion 16targetSdkVersion 30versionCode 1versionName "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", //暫時填寫默認值即可.]}

替換位置

?

注意這里的兩個地方:

applicationId是你在極光開發平臺上新建應用時的包名要一致,

然后下面的JPUSH_APPKEY是新建應用的對應的appkey

然后打開項目的AndroidManifest.xml中添加權限

??? <!-- Required --><permissionandroid: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" />

注意這里的第一個權限前面的包名要一致

然后在AndroidManifest.xml中再注冊一個繼承JCommonService的服務

??????? <!-- 注冊繼承JCommonService的服務 --><serviceandroid: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中自定義一個receiver替換原生極光推送接收器

??????? <!-- 替換原生極光推送接收器 --><receiverandroid: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;@Overridepublic void onConnected(Context context, boolean b) {super.onConnected(context, b);Log.e(TAG, "onConnected");}@Overridepublic void onRegister(Context context, String s) {super.onRegister(context, s);Log.e(TAG, "onRegister" + s);}@Overridepublic 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),指在手機的通知欄(狀態欄)上會顯示的一條通知信息*/@Overridepublic void onNotifyMessageArrived(Context context, NotificationMessage notificationMessage) {super.onNotifyMessageArrived(context, notificationMessage);Log.e(TAG, notificationMessage.toString());}/*** notificationMessage.notificationExtras(附加字段)的內容處理代碼* 比如打開新的Activity, 打開一個網頁等..*/@Overridepublic 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。其內容和展示形式完全由開發者自己定義。* 自定義消息主要用于應用的內部業務邏輯和特殊展示需求*/@Overridepublic void onMessage(Context context, CustomMessage customMessage) {super.onMessage(context, customMessage);Log.e(TAG, "onMessage");} }

在自定義接收器中重寫一些方法來實現相關的回調

然后在MainActivity中進行對Jpush的初始化

??? @Overrideprotected 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.0intent.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);}

然后將項目運行,登錄極光開發者平臺找到推送消息

前提是要執行如下操作

在Jpush官網中找到開發者服務,進入開發者平臺

然后點擊創建應用

?

新建應用時要設置一個包名,記住這個包名在代碼中要用到

然后選擇推送服務

?

點擊下一步,然后可以選擇要集成的廠商通道

?

選擇集成Android

?

然后官方提供了集成的文檔以及sdk的下載和demo,我們在Android中集成時可以通過jcenter的方式去集成依賴,新建應用完成后

復制出來應用包名和AppKey,

?

目標人群選擇所有人

?

則會在App中收到推送

?

通過別名設置指定設備進行推送

上面是對所有的設備進行推送,如果需要對指定的設備進行推送的話

可以通過設置設備的別名來實現。

注意跟標簽的區別,標簽是一類設備,別名是指定設備

首先在主頁面上添加兩個按鈕

<?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"><Buttonandroid: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" /><Buttonandroid: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() {@Overridepublic void onClick(View view) {JPushInterface.setAlias(getApplicationContext(),0000000001,"badaodechengxvyuan");Log.i("setAlias","setAlias");}});//刪除別名一般在注銷登錄時findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {JPushInterface.deleteAlias(getApplicationContext(),0000000001);Log.i("deleteAlias","deleteAlias");}});

其中設置別名一般在App進行登錄時設置

?

然后刪除別名一般在注銷登錄后進行,這里設置別名和刪除別名都使用按鈕事件去實現

?

然后啟動項目,點擊注冊別名按鈕。

另外在自定義接收器中的onAliasOperatorResult可以實現對別名注冊與刪除別名的回調

然后登錄極光開發者后臺,在消息推送中目標選擇中設置設備別名

?

然后就會在指定的app設備中收到推送

?

然后在日志中也能看到進入到別名設置的回調中了

?

然后再點擊一下刪除別名注冊按鈕,則在設備上就收不到推送消息了,并且在極光開發者后臺也會提示

?

然后在回調方法中也輸出

?

示例代碼下載

https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15435342

總結

以上是生活随笔為你收集整理的Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。