我现在的需求是酱紫的:
我们的应用客户端现在有20几万的用户量,当应用每次启动时,都会上传该客户端的相关信息,其中包括这个客户端当前所在的位置,即经度和纬度信息,那么这些数据我们都存在数据库中,现在我们有个需求,就是调用了百度的云推送服务给客户端发送消息,现在的问题是:我想实现给某个城市(比如杭州)的所有用户发送消息,这个该怎么做啊?通过什么样的条件才能把这些用户筛选出来啊?求指教。。。
我现在的需求是酱紫的:
我们的应用客户端现在有20几万的用户量,当应用每次启动时,都会上传该客户端的相关信息,其中包括这个客户端当前所在的位置,即经度和纬度信息,那么这些数据我们都存在数据库中,现在我们有个需求,就是调用了百度的云推送服务给客户端发送消息,现在的问题是:我想实现给某个城市(比如杭州)的所有用户发送消息,这个该怎么做啊?通过什么样的条件才能把这些用户筛选出来啊?求指教。。。
百度和google地图的api都是可以通过反查查到gps的城市的。
百度的api:http://developer.baidu.com/map/webservice-geocoding.htm
google的api:https://developers.google.com/maps/documentation/geocoding/?hl=zh-cn
每次上传都去反查api,得出城市信息打上tag,把数据存入mongo。
百度云推送分组推送说明:http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/scene
简单的方法就是新建个城市字段,然后所有的坐标都通过地图API获取地理位置存储。直接通过城市字段选取的话就非常简单了。虽然工作量很大,但是方便你以后筛选其它城市的用户。
其它的方法就是,由于无法获取城市的坐标范围,所以只能根据杭州的坐标“30°16′00″N 120°12′00″E” (via WikiPedia),杭州上下左城市的坐标(分别应该是嘉兴,临安,绍兴)获取到杭州的大概的坐标范围根据这个筛选一次数据库。给这些人发消息就稍微靠谱一点了。如果还要更加靠谱的话,可以对这些坐标进行一次具体城市的读取,然后排出掉。为了减少工作量,可以根据杭州的坐标中心和面积画一个大概的圆排掉一些肯定是杭州的坐标然后对剩下的进行具体城市读取。
其实吧。我觉得你该这样。
应用启动后,注册推送客户端tags添加城市拼音。比如注册tags[hangzhou,other_tag]。然后发送推送时,直接发送给所有包含hangzhou tag的client即可。
至于如何获取hangzhou这个东西。可以在上传记录的时候,服务器直接返回对应记录。
客户端启动时将坐标传到了服务器,服务器再处理一下,添加一个城市字段,百度Google都能轻松获得。不过百度不支持国外坐标。
这样就很方便处理了。
在客户端的下一个版本里,应该可以很轻松拿到城市坐标等各种地理信息,把城市也传过来,这样服务端就不必再用坐标去查询,直接入库。
必须用经纬度信息吗?那么可以用百度地图api获取经纬度所对应的的城市。
抑或更简单的通过当前ip地址判断用户所在地?百度地图亦有开放api。
http://developer.baidu.com/map/ip-location-api.htm