首先我们要申请一个极光推送的账号,用自己项目的包名在控制台里创建一个自己的应用
创建好的应用界面如图下所示,在后面的配置中我们会用到这个appKey和secret
现在我们就可以在自己的项目里面集成了
我们去下载极光的sdk包,把sdk拷到我们相应的项目文件夹下,如下图所示:
现在我们开始配置我们的清单文件:
必需的权限 少不了:
<permissionandroid:name="您的包名.permission.JPUSH_MESSAGE"android:protectionLevel="signature" /><!-- 要求 --> <uses-permission android:name="您的包名.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.WAKE_LOCK" /> <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.VIBRATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACTION_APPLICATION_DETAILS_SETTINGS"/><!-- Optional. Required for location feature --> <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" />
下面是极光推送的核心服务的配置:
<!-- Required SDK 核心功能--> <!-- 可配置android:process参数将PushService放在其他进程中 --> <serviceandroid:name="cn.jpush.android.service.PushService"android:enabled="true"android:exported="false" ><intent-filter><action android:name="cn.jpush.android.intent.REGISTER" /><action android:name="cn.jpush.android.intent.REPORT" /><action android:name="cn.jpush.android.intent.PushService" /><action android:name="cn.jpush.android.intent.PUSH_TIME" /></intent-filter> </service><!-- since 3.0.9 Required SDK 核心功能--> <providerandroid:authorities="com.jspush.jpushdemo.DataProvider"android:name="cn.jpush.android.service.DataProvider"android:exported="true" /><!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。 --> <!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 --> <serviceandroid:name="cn.jpush.android.service.DaemonService"android:enabled="true"android:exported="true"><intent-filter ><action android:name="cn.jpush.android.intent.DaemonService" /><category android:name="com.jspush.jpushdemo"/></intent-filter> </service>
<!-- since 3.1.0 Required SDK 核心功能--> <providerandroid:authorities="您的包名.DownloadProvider"android:name="cn.jpush.android.service.DownloadProvider"android:exported="true"/><!-- Required SDK核心功能--> <receiverandroid:name="cn.jpush.android.service.PushReceiver"android:enabled="true" ><intent-filter android:priority="1000"><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /><category android:name="您的包名"/></intent-filter><intent-filter><action android:name="android.intent.action.USER_PRESENT" /><action android:name=CONNECTIVITY_CHANGE" /></intent-filter><!-- Optional --><intent-filter><action android:name="android.intent.action.PACKAGE_ADDED" /><action android:name="android.intent.action.PACKAGE_REMOVED" /><data android:scheme="package" /></intent-filter> </receiver>
<!-- Required SDK核心功能--> <activityandroid:name="cn.jpush.android.ui.PushActivity"android:configChanges="orientation|keyboardHidden"android:theme="@android:style/Theme.NoTitleBar"android:exported="false" ><intent-filter><action android:name="cn.jpush.android.ui.PushActivity" /><category android:name="android.intent.category.DEFAULT" /><category android:name="您的包名" /></intent-filter> </activity><!-- SDK核心功能--> <activityandroid:name="cn.jpush.android.ui.PopWinActivity"android:configChanges="orientation|keyboardHidden"android:exported="false"android:theme="@style/AppTheme"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="您的包名" /></intent-filter> </activity><!-- Required SDK核心功能--> <serviceandroid:name="cn.jpush.android.service.DownloadService"android:enabled="true"android:exported="false" > </service>
!-- Required SDK核心功能--> <receiver android:name="cn.jpush.android.service.AlarmReceiver" /><!-- Required since 3.0.7 --> <!-- 新的tag/alias接口结果返回需要开发者配置一个自定的广播 --> <!-- 该广播需要继承JPush提供的JPushMessageReceiver类, 并如下新增一个 Intent-Filter --> <receiverandroid:name=".MyJPushMessageReceiver"android:enabled="true" ><intent-filter><action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /><category android:name="您的包名" /></intent-filter> </receiver><!-- User defined. 用户自定义的广播接收器--> <receiverandroid:name=".MyReceiver"android:enabled="true"><intent-filter><!--Required 用户注册SDK的intent--><action android:name="cn.jpush.android.intent.REGISTRATION" /><!--Required 用户接收SDK消息的intent--><action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /><!--Required 用户接收SDK通知栏信息的intent--><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /><!--Required 用户打开自定义通知栏的intent--><action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /><!-- 接收网络变化 连接/断开 since 1.6.3 --><action android:name="cn.jpush.android.intent.CONNECTION" /><category android:name="您的包名" /></intent-filter> </receiver>
<!-- Required. For publish channel feature --> <!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。--> <!-- 例如: --> <!-- 发到 Google Play 的APK可以设置为 google-play; --> <!-- 发到其他市场的 APK 可以设置为 xxx-market。 --> <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/> <!-- 设置 AppKey --> <meta-data android:name="JPUSH_APPKEY" android:value="您的APP_KEY"/>
好了现在我们的清单文件就配置完了,下面看一下主要的服务类的代码
一定要在APPlication里面初始化极光
下面的是广播的一个接收器
/*** 自定义广播接收器*/ public class MyReceiver extends BroadcastReceiver {private static final String TAG = "MyReceiver";@Overridepublic void onReceive(Context context, Intent intent) {Bundle bundle = Extras();if (JPushInterface.ACTION_REGISTRATION_ID.Action())) {String regId = String(JPushInterface.EXTRA_REGISTRATION_ID);Log.e(TAG, "JPush用户注册成功id: " + regId);} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.Action())) {Log.e(TAG, "接受到推送下来的自定义消息id: " + String(JPushInterface.EXTRA_MESSAGE));} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.Action())) {int notifactionId = Int(JPushInterface.EXTRA_NOTIFICATION_ID);Log.e(TAG, "接受到推送下来的通知id: " + notifactionId);} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.Action())) {// Intent i = new Intent(context, TestActivity.class); // i.putExtras(bundle); // i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // context.startActivity(i);Log.e(TAG, "用户点击打开了通知跳转的Activity: ");} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.Action())) {Log.e(TAG, "onReceive: " + String(JPushInterface.EXTRA_EXTRA));} else if (JPushInterface.ACTION_CONNECTION_CHANGE.Action())) {boolean connected = BooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);Log.e(TAG, "onReceive: " + Action() + " 连接状态变化 " + connected);} else {Log.e(TAG, "onReceive: 未处理的意图- " + Action());}} }
下面的是标签、别名、ID个推和群推的一个服务的接收器
public class MyJPushMessageReceiver extends JPushMessageReceiver {private static final String TAG = "MyJPushMessageReceiver";/*** tag增删查改的操作会在此方法中回调结果*/@Overridepublic void onTagOperatorResult(Context context, JPushMessage jPushMessage) {TagOperatorResult(context, jPushMessage);//下面2个回调类似Log.e("------TAG", "onTagOperatorResult查询得到的别名: " + Alias());Log.e("------TAG", "onTagOperatorResult查询得到的标签: " + Tags());Log.e("------TAG", "onTagOperatorResult错误码0为成功: " + ErrorCode());Log.e("------TAG", "onTagOperatorResult传入的标示: " + Sequence());}/*** 查询某个tag与当前用户的绑定状态的操作会在此方法中回调结果*/@Overridepublic void onCheckTagOperatorResult(Context context, JPushMessage jPushMessage) {CheckTagOperatorResult(context, jPushMessage);Log.e("------TAG", "onCheckTagOperatorResult错误码0为成功: " + ErrorCode());}/*** alias相关的操作会在此方法中回调结果*/@Overridepublic void onAliasOperatorResult(Context context, JPushMessage jPushMessage) {AliasOperatorResult(context, jPushMessage);Log.e("------TAG", "onAliasOperatorResult错误码0为成功: " + ErrorCode());} }
最后写一个判断通知栏是否已经开启的通知栏的一个工具类,就OK了
下面我们在MainActivity里面用一下:
首先判断下通知栏是否开启,只有在开启的情况下才能用标签、别名、ID推送
我的demo里面是标签推送,下面我添加了几个标签
ok,完了,功能也实现了
本demo已经测试完毕,已经运用到自己的项目中,可以放心使用!
本博客只是记录开发的点滴,不喜勿喷!
下面是demo下载地址,有意愿的朋友可以下载:
谢谢!!!!
本文发布于:2024-02-02 04:58:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170682113541503.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |