我現在的需求是醬紫的:
我們的應用用戶端現在有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