关于极光推送的集成,以及实现标签、别名、ID的群推或个推的功能

阅读: 评论:0

关于极光推送的集成,以及实现标签、别名、ID的群推或个推的功能

关于极光推送的集成,以及实现标签、别名、ID的群推或个推的功能

首先我们要申请一个极光推送的账号,用自己项目的包名在控制台里创建一个自己的应用

创建好的应用界面如图下所示,在后面的配置中我们会用到这个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小时内删除。

标签:极光   别名   标签   功能   ID
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23