推送集成方案
1.介绍:
首先我们得aar包分为debug包,以及release包,其中release包做了混淆,开发者使用时候需要去混淆配置文件进行单独类配置,以防无法访问相应得类名。我们得aar包支持的推送分为(小米推送,华为推送,魅族推送,vivo推送,oppo推送,以及三方信鸽推送)。
2.使用:
1)将aar包拷贝到我们的项目的lib文件中,然后在我们的app build.gradle文件中添加
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}
然后rebuild一下ok。
2)然后自己定义一个MyApplication继承BasePushApplication,这个是我们aar包自带的封装好的,可以供aar包支持的所有的推送,所以我们只需要继承这一个就ok,而且机型不需要我们自己进行判断了,只需要继承相应的方法就可以实现走相应机型的推送通道,然后别忘了在我们的清单文件中将我们自定义的MyApplication进行注册。
<application
android:name=".MyApplication"
xxx...>
<activity android:name="xxx">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
3)点击通知栏跳转到指定的Activity:
如果我们的需求有要求点击通知栏跳转到指定的activity界面的时候,需要我们在清单文件中进行跳转activity的注册,供用aar包中包含的所有推送通道的自定义界面。其中PushActivity名字可以根据自己项目自定义取,里面的配置都是
<!--所有推送得公共类。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。-->
<activity
android:name=".PushActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="com.example.hwdemo"
android:path="/notify_detail"
android:scheme="customscheme" />
</intent-filter>
</activity>
2.1小米推送:
集成小米推送也很简单,其余复杂的事情我们的aar都处理过了,剩下的只是一些小的细节的问题,这里介绍一下使用小米推送我们要怎么做;
1)清单文件中的配置:
注意:com.xiaomi.mipushdemo 要换成自己项目中的包名
<!--小米推送权限。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.VIBRATE" />
<permission
android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature" /> <!-- 这里com.xiaomi.mipushdemo改成app的包名 -->
<uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" />
注意:com.xiaomi.mipushdemo.DemoMessageRreceiver要换成自己项目中的自定义的广播的类名。
-->
<!-- 配置小米的推送的服务和广播 -->
<service
android:name="com.xiaomi.push.service.XMPushService"
android:enabled="true"
android:process=":pushservice" />
<service
android:name="com.xiaomi.push.service.XMJobService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":pushservice" /> <!-- 注:此service必须在3.0.1版本以后(包括3.0.1版本)加入 -->
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" /> <!-- 注:此service必须在2.2.5版本以后(包括2.2.5版本)加入 -->
<receiver
android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver
android:name="com.xiaomi.push.service.receivers.PingReceiver"
android:exported="false"
android:process=":pushservice">
<intent-filter>
<action android:name="com.xiaomi.push.PING_TIMER" />
</intent-filter>
</receiver>
<!-- 注册广播接收者 -->
<receiver
android:name="com.xiaomi.mipushdemo.DemoMessageRreceiver"
android:exported="true">
<!-- 这里com.xiaomi.mipushdemo.DemoMessageRreceiver改成app中定义的完整类名 -->
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
2)使用:
非常简单,只需要在我们的自定义的MyApplication中调用BasePushApplication中的方法initXiaoMiPush,然后在initXiaoMiPush这个方法中调用setRegistXiaoMi(appId,appKey);这个方法进行小米推送的注册,其中appId和appKey,是我们在小米推送平台申请推送时候生成的,直接拿过来用就ok。
public class MyApplication extends BasePushApplication {
@Override
public void initXiaoMiPush() {
super.initXiaoMiPush();
String appId = AppParms.XmAppId;
String appKey = AppParms.XmAppKey;
setRegistXiaoMi(appId,appKey);
}
}
然后是我们自定义的广播接收者,方法要运行在非ui线程中才可以。
public class XmPushReceiver extends PushMessageReceiver {
/**
* 1.PushMessageReceiver是一个抽象类,通过集成该类,实现小米推送注册之后的回调
* 2.需要将IMIPushMessageReceiver注册到Manifest文件中
* 3.通过onReceivePassThroughMessage方法处理服务器向客户端发送的透传消息
* 4.通过onNotificationMessageClicked方法服务器向客户端发送通知消息,该回调方法会在用户点击通知之后触发
* 5.通过onNotificationMessageArrived方法服务器向客户端发送通知消息,该回调方法会在通知消息到达客户端之后触发。另外应用在前台时不展示通知也在该方法中调用
* 6.通过onCommandResult方法来接收客户端向服务器发送命令后的响应结果
* 7.通过onReceiveRegisterResult方法接收客户端向服务器注册推送后响应的结果
* 8.当前所有的操作都没有运行在UI线程
*/
private String mRegId;
private long mResultCode = -1;
private String mReason;
private String mCommand;
private String mMessage;
private String mTopic;
private String mAlias;
private String mUserAccount;
private String mStartTime;
private String mEndTime;
@Override
public void onReceivePassThroughMessage(Context context,
MiPushMessage message) {
mMessage = message.getContent();
if(!TextUtils.isEmpty(message.getTopic())) {
mTopic=message.getTopic();
} else if(!TextUtils.isEmpty(message.getAlias())) {
mAlias=message.getAlias();
} else if(!TextUtils.isEmpty(message.getUserAccount())) {
mUserAccount=message.getUserAccount();
}
}
/**
* 点击通知栏的推送
* @param context
* @param message
*/
@Override
public void onNotificationMessageClicked(Context context,
MiPushMessage message) {
}
@Override
public void onNotificationMessageArrived(Context context,
MiPushMessage message) {
mMessage = message.getContent();
if(!TextUtils.isEmpty(message.getTopic())) {
mTopic=message.getTopic();
} else if(!TextUtils.isEmpty(message.getAlias())) {
mAlias=message.getAlias();