如何给某类用户进行推送呢?

在维护Bmob消息推送SDK的时候,有很多开发者会问到如何给某类用户进行推送,例如,在教学类的应用中你需要对60分以下的同学进行推送提醒,鼓励他们努力学习。下边我就详细阐述一下:

1、设计后端云数据库表结构

_User表结构

属性 类型 说明
username String 用户名
password String 密码
score Integer 该用户的分数
role Integer 该用户的角色,0:老师,1:学生

_Installation表结构

属性 类型 说明
installationId String 设备唯一标志,SDK自动生成
user Pointer<_User> 该设备当前登录用户

2、推送思路

在用户角色为老师的情况下,具有推送给其他客户端消息的功能,首先查询角色为学生的分数在60分以下的用户,在根据查询的结果作为推送的条件进行推送。(为了简单理解,学生的分数会在注册的时候自动随机生成,在实际项目中需要老师为学生打分。)

3、关键代码

3.1、登录以及注册成功之后修改_Installation表的user属性为当前用户

/*** 修改设备表的用户信息:先查询设备表中的数据,再修改数据中用户信息** @param user*/
private void modifyInstallationUser(final User user) {BmobQuery<Installation> bmobQuery = new BmobQuery<>();final String id = BmobInstallationManager.getInstallationId();bmobQuery.addWhereEqualTo("installationId", id);bmobQuery.findObjectsObservable(Installation.class).subscribe(new Action1<List<Installation>>() {@Overridepublic void call(List<Installation> installations) {if (installations.size() > 0) {Installation installation = installations.get(0);installation.setUser(user);installation.updateObservable().subscribe(new Action1<Void>() {@Overridepublic void call(Void aVoid) {toastI("更新设备用户信息成功!");}}, new Action1<Throwable>() {@Overridepublic void call(Throwable throwable) {toastE("更新设备用户信息失败:" + throwable.getMessage());}});} else {toastE("后台不存在此设备Id的数据,请确认此设备Id是否正确!\n" + id);}}}, new Action1<Throwable>() {@Overridepublic void call(Throwable throwable) {toastE("查询设备数据失败:" + throwable.getMessage());}});
}

3.2、退出登录成功后修改_Installation表的user属性为空

/*** 修改设备表的用户信息:先查询设备表中的数据,再修改数据中用户信息*/
private void modifyInstallationUser() {BmobQuery<Installation> bmobQuery = new BmobQuery<>();final String id = BmobInstallationManager.getInstallationId();bmobQuery.addWhereEqualTo("installationId", id);bmobQuery.findObjectsObservable(Installation.class).subscribe(new Action1<List<Installation>>() {@Overridepublic void call(List<Installation> installations) {if (installations.size() > 0) {Installation installation = installations.get(0);User user = new User();installation.setUser(user);user.setObjectId("");installation.updateObservable().subscribe(new Action1<Void>() {@Overridepublic void call(Void aVoid) {toastI("更新设备用户信息成功!");/*** TODO 更新成功之后再退出*/BmobUser.logOut();startActivity(new Intent(mContext, LoginActivity.class));finish();}}, new Action1<Throwable>() {@Overridepublic void call(Throwable throwable) {toastE("更新设备用户信息失败:" + throwable.getMessage());}});} else {toastE("后台不存在此设备Id的数据,请确认此设备Id是否正确!\n" + id);}}}, new Action1<Throwable>() {@Overridepublic void call(Throwable throwable) {toastE("查询设备数据失败:" + throwable.getMessage());}});
}

3.3、在老师角色下向60分以下的学生用户进行推送

BmobQuery<User> bmobQueryUser = new BmobQuery<>();
bmobQueryUser.addWhereEqualTo("role",1);
bmobQueryUser.addWhereLessThan("score",60);
bmobQueryUser.findObjects(new FindListener<User>() {@Overridepublic void done(List<User> list, BmobException e) {if (e==null){for (User user:list){BmobPushManager bmobPushManager = new BmobPushManager();BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();query.addWhereEqualTo("user", user);bmobPushManager.setQuery(query);bmobPushManager.pushMessage("努力加油", new PushListener() {@Overridepublic void done(BmobException e) {if (e == null) {Logger.e("推送成功!");} else {Logger.e("异常:" + e.getMessage());}}});}}else {toastE(e.getMessage());}}
});

4、Demo下载地址

Demo下载地址:https://github.com/chaozhouzh...

关于消息推送,你可以知道这个相关推荐

  1. iOS消息推送机制的实现

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

  2. 未读消息(小红点),前端 与 RabbitMQ 实时消息推送实践,贼简单~

    前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...

  3. 友盟小米收不到推送消息_Android 手机收不到消息推送的设置指南 - 融云 RongCloud...

    如何解决 Android 手机因推送权限问题收不到消息提醒? 问题描述 部分 Android 手机系统在黑屏待机后自动清理后台运行的软件,这样影响了应用正常接收新的消息,需要开启手机的某些权限.此文档 ...

  4. iOS 消息推送原理及实现总结

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图: 1. Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Prov ...

  5. 安卓消息推送解决方案

    一.推送工具使用 我们在做安卓开发的时候,通常需要一些消息推送功能,我个人平时用的是极光推送,极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极 ...

  6. 细说 iOS 消息推送

    APNS的推送机制 与Android上我们自己实现的推送服务不一样,Apple对设备的控制很严格.消息推送的流程必需要经过APNs: 这里 Provider 是指某个应用的Developer,当然假设 ...

  7. Asp.net SignalR 实现服务端消息推送到Web端

    参考博客https://www.cnblogs.com/wintersun/p/4148223.html ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的W ...

  8. 【iOS学习笔记】IOS开发中设置applicationIconBadgeNumber和消息推送

    因为在IOS8中要想设置applicationIconBadgeNumber,需要用户的授权,在IOS8中,需要加上下面的代码: UIUserNotificationSettings *setting ...

  9. Android socket 编程 实现消息推送(二)

    上篇文章Android socket 编程 实现消息推送(一)讲到socket编程的消息推送原理,现在我们来看看基于Android客户机socket编程实现消息推送的过程. 根据消息推送的原理图,我们 ...

  10. Android socket 编程 实现消息推送

    最近用socket写了一个消息推送的demo,在这里和大家分享一下. 主要实现了:一台手机向另外一台手机发送消息,这两台手机可以随时自由发送文本消息进行通信,类似我们常用的QQ. 效果图:    原理 ...

最新文章

  1. 《计算机原理》教案,计算机原理及应用教案
  2. go异常处理:自定义异常代码示例
  3. phpcms移动端和pc端_移动端调试大法
  4. 万向区块链首席经济学家:央行数字货币与狭义银行是不同层次的概念
  5. 对于圣杯布局和双飞翼布局的新认识
  6. 关于手机端适配的问题(rem,页面缩放)
  7. 试炼之石:Performance
  8. hdb3编码规则波形_求HDB3码编码后波形,编码后功率谱密度图形,求解啊
  9. mysql 数据字典导出_MySQL导出数据字典
  10. Android 对一个View进行缩放处理(放大或缩小View)案例
  11. SQL中获取当前时间的函数、在日期上减去指定的天数的函数
  12. linux配置git
  13. 【产业互联网周报】三家量子计算初创企业宣布融资,华为公开量子密钥相关专利;钉钉高调押注低代码,腾讯云低码平台开启公测...
  14. 总有一条适合你:名人凡人经典语录200条
  15. win10通过命令行查看无线密码
  16. 迈拓维矩科技园开工奠基仪式盛大举行
  17. String 对象 与 StringBuilder 对象的比较.....
  18. 消防装备管理系统功能架构概述
  19. GIS地理信息系统的升维降维创新理念研究
  20. Xposed框架开发入门(一)

热门文章

  1. Windows中彻底卸载MySQL
  2. Win10开机跳过欢迎界面直接进系统桌面的设置方法
  3. XShell多版本存在后门,避免服务器账号密码被上传
  4. 快速找出Linux服务器上不该存在恶意或后门文件
  5. Linux篇:shell脚本监控主机状态的3种方式
  6. 完整、详细的MySQL规范
  7. 日语学习 (助词 「で」 和「に」 的区别)
  8. springboot在启动jar由于配置hibernate的映射文件上classpath导致的!BOOT-INF/classes/!路径出现!号问题解决方法
  9. SpringBoot使用MongoDB异常问题
  10. dbeaver驱动问题解决方案