admin管理员组文章数量:1130349
1. 小米推送介绍(着急集成移步第二节)
1. 小米推送类型?
支持通知栏提醒(不需要应用驻留后台)和透传消息两种类型,同时提供运营平台及API两种推送消息下发方式
2. 小米推送样式?
MIUI10(目前最新版本MIUI12.5)以上,同一个App的所有通知栏消息会聚合成一个消息组,消息组最多支持展示10条消息,超过10条消息,会自动删除一条最老的消息并补上来一条新消息
3. 小米推送实现方式?
小米推送支持标签(Topic)、RegID、别名(Alias)、Useraccount四种消息发送方式
目前APP常用的推送是RegID推送
4. 基于 RegID的推送
RegID是小米推送为每个设备上的每个app注册推送服务时生成的唯一标识
RegID是在客户端向小米推送服务注册时,小米推送服务端根据设备标识、AppID以及当前时间戳生成,因此能够保证每个设备上每个app对应的regID都是不同的
PS: RegID在应用卸载或清除本地数据后会重新生成
5. 自MIUI 9开始,新增了通知过滤的功能
通知过滤是指通过分析用户对通知的操作,来个性化地确定通知的重要与不重要,然后将不重要的通知收纳进一个统一的页面。
6. MIUI 10
MIUI 10 通知栏基于 Android O 做了重构,大大增强了通知栏的能力
通知类别 (Channel) 适配说明
通知类别 (channel) 是 Android O 引入的新功能,旨在解决以下问题:
- 应用的通知越来越多,给用户造成明显打扰
- 但用户只能全局屏蔽这个应用的全部通知,不能屏蔽部分,然后留下对自己有用的
7. 通知样式
注: 在MIUI中,由于通知栏是由小米服务框架弹出,因此大、小图标均不可自定义。使用的声音资源必须先内置在应用程序的安装包中。
2. 集成小米Push
题外话: 小米推送客户端SDK集成很简单,仅需一位工程师0.5天的时间即可完成,不知真假:)
了解步骤之前先下载第3点的SDK,我这边是选择AAR方式集成
1. 项目app module的 build.gradle 中添加依赖
android{
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
implementation (name: 'MiPush_SDK_Client_xxx', ext: 'aar')
}
2. 为了接收消息,您需要为APP自定义一个继承自 PushMessageReceiver 类的BroadcastReceiver
<!-- Mi Push -->
<!-- com.example.mi.MiMessageReceiver 中 com.example 替换为自己APP的包名 -->
<receiver
android:name="com.example.mi.MiMessageReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<!-- Mi Push -->
注意:请务必确保该自定义BroadcastReceiver所在进程与调用注册推送接口(MiPushClient.registerPush())的进程为同一进程(强烈建议都在主进程中)
后续需要推送消息的注册ID(regId)等都会在这个Recevier中回调
3. 应用调用MiPushClient类的静态方法registerPush注册小米推送服务
/**
* 2. 小米
* <p>
* 注册 Mi Push 服务,注册成功后会向 MiMessageReceiver 发送广播
* 可以从 MiMessageReceiver 的 onCommandResult 方法中 MiPushCommandMessage 对象参数中获取注册信息
*
* @param mResult
*/
public void initMiService(MethodChannel.Result mResult) {
if (shouldInit()) {
MiPushClient.registerPush(this, MI_APP_ID, MI_APP_KEY);
}
LoggerInterface newLogger = new LoggerInterface() {
@Override
public void setTag(String tag) {
// ignore
}
@Override
public void log(String content, Throwable t) {
CLog.i(TAG, content);
}
@Override
public void log(String content) {
CLog.i(TAG, content);
}
};
Logger.setLogger(this, newLogger);
}
4. 注册结果将通过PushMessageReceiver继承类的onCommandResult方法中的MiPushCommandMessage参数对象message传到客户端。当message对象的command等于MiPushClient.COMMAND_REGISTER,并且message对象的resultCode等于ErrorCode.SUCCESS时,message对象commandArguments包含了服务器返回的regId。regId即是当前设备app的唯一标示。您可以将regId上传到自己的服务器,方便向其发消息。
在啰嗦一句,regId是由服务器端生成的,能够唯一标识某台手机上的某个应用。 应用在获取到regId后,需要将regId上报到应用的服务器,此时应用服务端就可以利用regId向客户端发送消息
5. 消息到达客户端后会弹出通知,点击通知消息,会回调 onReceiveMessage
/**
* 新版实现的接口访方法有更新;
*
* @param context
* @param message
*/
@Override
public void onReceiveMessage(Context context, MiPushMessage message) {
if (message.getPassThrough() == 0) {
Log.i(TAG, "message.getContent(): " + message.getContent());
Log.i(TAG, "message " + message.toString());
if (!TextUtils.isEmpty(message.getContent())
&& message.isNotified()) {
try {
JSONObject openCallback = new JSONObject(
message.getContent());
Log.i(TAG, "openCallback: " + openCallback.toString());
// 启动对应APP...... 这里如果不写逻辑的话,点击通知栏的消息,启动不了APP的,切记
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
6. 小提示
1. 对开发者而言,使用客户端SDK可以完成两方面功能:
- 客户端给服务器发送各种请求(对应
MiPushClient的接入类)。 - 服务器给客户端发送的消息和对客户端请求的响应(对应
PushMesssageReceiver的实现类)。
2. 当成功集成小米推送过后,服务端构建消息时,可以通过设置EXTRA_PARAM_NOTIFY_FOREGROUND的值设置为"0"或者"1",来确定是否应用处于前台时弹出通知栏消息;
3. 参考
1. SDK下载
2. Android版快速接入指南
3. Android客户端SDK集成指南(JAR版)
4. Android客户端SDK集成指南(AAR版) (推荐方式)
5. 服务端Java SDK文档(速度发给你们的服务端小伙伴)
6. 推送SDK版本更新
7. 媒体通知是Android标准通知样式的一种,自 API 21(Android 5.0) 引入,方便用户直接控制媒体内容,常见于音乐类、广播类应用。
8. 应用角标
9. 推送服务启用指南
10. 小米推送消息限制说明
1. 小米推送介绍(着急集成移步第二节)
1. 小米推送类型?
支持通知栏提醒(不需要应用驻留后台)和透传消息两种类型,同时提供运营平台及API两种推送消息下发方式
2. 小米推送样式?
MIUI10(目前最新版本MIUI12.5)以上,同一个App的所有通知栏消息会聚合成一个消息组,消息组最多支持展示10条消息,超过10条消息,会自动删除一条最老的消息并补上来一条新消息
3. 小米推送实现方式?
小米推送支持标签(Topic)、RegID、别名(Alias)、Useraccount四种消息发送方式
目前APP常用的推送是RegID推送
4. 基于 RegID的推送
RegID是小米推送为每个设备上的每个app注册推送服务时生成的唯一标识
RegID是在客户端向小米推送服务注册时,小米推送服务端根据设备标识、AppID以及当前时间戳生成,因此能够保证每个设备上每个app对应的regID都是不同的
PS: RegID在应用卸载或清除本地数据后会重新生成
5. 自MIUI 9开始,新增了通知过滤的功能
通知过滤是指通过分析用户对通知的操作,来个性化地确定通知的重要与不重要,然后将不重要的通知收纳进一个统一的页面。
6. MIUI 10
MIUI 10 通知栏基于 Android O 做了重构,大大增强了通知栏的能力
通知类别 (Channel) 适配说明
通知类别 (channel) 是 Android O 引入的新功能,旨在解决以下问题:
- 应用的通知越来越多,给用户造成明显打扰
- 但用户只能全局屏蔽这个应用的全部通知,不能屏蔽部分,然后留下对自己有用的
7. 通知样式
注: 在MIUI中,由于通知栏是由小米服务框架弹出,因此大、小图标均不可自定义。使用的声音资源必须先内置在应用程序的安装包中。
2. 集成小米Push
题外话: 小米推送客户端SDK集成很简单,仅需一位工程师0.5天的时间即可完成,不知真假:)
了解步骤之前先下载第3点的SDK,我这边是选择AAR方式集成
1. 项目app module的 build.gradle 中添加依赖
android{
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
implementation (name: 'MiPush_SDK_Client_xxx', ext: 'aar')
}
2. 为了接收消息,您需要为APP自定义一个继承自 PushMessageReceiver 类的BroadcastReceiver
<!-- Mi Push -->
<!-- com.example.mi.MiMessageReceiver 中 com.example 替换为自己APP的包名 -->
<receiver
android:name="com.example.mi.MiMessageReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<!-- Mi Push -->
注意:请务必确保该自定义BroadcastReceiver所在进程与调用注册推送接口(MiPushClient.registerPush())的进程为同一进程(强烈建议都在主进程中)
后续需要推送消息的注册ID(regId)等都会在这个Recevier中回调
3. 应用调用MiPushClient类的静态方法registerPush注册小米推送服务
/**
* 2. 小米
* <p>
* 注册 Mi Push 服务,注册成功后会向 MiMessageReceiver 发送广播
* 可以从 MiMessageReceiver 的 onCommandResult 方法中 MiPushCommandMessage 对象参数中获取注册信息
*
* @param mResult
*/
public void initMiService(MethodChannel.Result mResult) {
if (shouldInit()) {
MiPushClient.registerPush(this, MI_APP_ID, MI_APP_KEY);
}
LoggerInterface newLogger = new LoggerInterface() {
@Override
public void setTag(String tag) {
// ignore
}
@Override
public void log(String content, Throwable t) {
CLog.i(TAG, content);
}
@Override
public void log(String content) {
CLog.i(TAG, content);
}
};
Logger.setLogger(this, newLogger);
}
4. 注册结果将通过PushMessageReceiver继承类的onCommandResult方法中的MiPushCommandMessage参数对象message传到客户端。当message对象的command等于MiPushClient.COMMAND_REGISTER,并且message对象的resultCode等于ErrorCode.SUCCESS时,message对象commandArguments包含了服务器返回的regId。regId即是当前设备app的唯一标示。您可以将regId上传到自己的服务器,方便向其发消息。
在啰嗦一句,regId是由服务器端生成的,能够唯一标识某台手机上的某个应用。 应用在获取到regId后,需要将regId上报到应用的服务器,此时应用服务端就可以利用regId向客户端发送消息
5. 消息到达客户端后会弹出通知,点击通知消息,会回调 onReceiveMessage
/**
* 新版实现的接口访方法有更新;
*
* @param context
* @param message
*/
@Override
public void onReceiveMessage(Context context, MiPushMessage message) {
if (message.getPassThrough() == 0) {
Log.i(TAG, "message.getContent(): " + message.getContent());
Log.i(TAG, "message " + message.toString());
if (!TextUtils.isEmpty(message.getContent())
&& message.isNotified()) {
try {
JSONObject openCallback = new JSONObject(
message.getContent());
Log.i(TAG, "openCallback: " + openCallback.toString());
// 启动对应APP...... 这里如果不写逻辑的话,点击通知栏的消息,启动不了APP的,切记
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
6. 小提示
1. 对开发者而言,使用客户端SDK可以完成两方面功能:
- 客户端给服务器发送各种请求(对应
MiPushClient的接入类)。 - 服务器给客户端发送的消息和对客户端请求的响应(对应
PushMesssageReceiver的实现类)。
2. 当成功集成小米推送过后,服务端构建消息时,可以通过设置EXTRA_PARAM_NOTIFY_FOREGROUND的值设置为"0"或者"1",来确定是否应用处于前台时弹出通知栏消息;
3. 参考
1. SDK下载
2. Android版快速接入指南
3. Android客户端SDK集成指南(JAR版)
4. Android客户端SDK集成指南(AAR版) (推荐方式)
5. 服务端Java SDK文档(速度发给你们的服务端小伙伴)
6. 推送SDK版本更新
7. 媒体通知是Android标准通知样式的一种,自 API 21(Android 5.0) 引入,方便用户直接控制媒体内容,常见于音乐类、广播类应用。
8. 应用角标
9. 推送服务启用指南
10. 小米推送消息限制说明
版权声明:本文标题:小米Push 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1758182204a2776282.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论