之前寫推送功能都在使用百度雲推送的系統,然后,突然發現百度雲推送在教育網情況下的服務不是很穩定,因此決定采用個推開放平台
個推的官網http://dev.igetui.com/,在這上面注冊賬號很簡單,注冊之后,登記新應用,然后有兩種方式,一種可以下載SDK自己接入,
還有一種可以選擇下載官方網站的示例Demo進行自己的修改,個推的SDK配置其實還是很簡單的,官網的文檔講的也很詳細下載的SDK包里面有比較詳細的接口和文檔
但是,在這里我說一下我在使用之中遇到的幾個問題,
首先 注冊推送服務的代碼是
1 MessageManager.getInstance().initialize(this.getApplicationContext());
在這里,成功注冊服務之后,會收到一個clientid 這個clientid對應的是設備,在同一個設備上同一個應用不論啟動多少次都會拿到同一個值
必須要等到拿到clientid之后才會開始推送服務,平均注冊成功的時間依據你的當前的網絡狀況來確定,一般情況下應該在10-15秒
另外,在這里,使用服務器推送消息智能推送透傳消息,在官網的首頁看到的通知消息是不能使用服務器推送的,透傳消息需要注冊一個BroadcastReceiver
在文檔中和官方的Demo中都有說明就不詳細介紹了這個東西
在這個里面,這個是取得透傳數據的代碼部分,同時因為要通知主線程更新UI線程,所以我使用了BroadcastReceiver來確保能使消息更新主線程
case Consts.GET_MSG_DATA: // 獲取透傳數據 // String appid = bundle.getString("appid"); byte[] payload = bundle.getByteArray("payload"); if (payload != null) { String data = new String(payload); System.out.println("the item is " + data); Log.d("GexinSdkDemo", "Got Payload:" + data); Intent intent1 = new Intent(); intent1.setAction("com.message"); context.sendBroadcast(intent1); }
同時clientid也是在這里面拿到的
1 case Consts.GET_CLIENTID: 2 // 獲取ClientID(CID) 3 // 第三方應用需要將CID上傳到第三方服務器,並且將當前用戶帳號和CID進行關聯,以便日后通過用戶帳號查找CID進行消息推送 4 String cid = bundle.getString("clientid"); 5 6 System.out.println("the client id is" + cid); 7 break;
同時,在個推中還有許多功能其他的功能可以拓展,我正在研究中,以后可能還會有其他的更新