實現推送功能的方案有許多,具體可以看《程式設計師》的一篇文章這裡也詳解了ios與android接受推送的機制不同。
本文主要講的是利用第三方平台來開發個推功能的api,使用的個推平台:
設計:類:
loginuserpojo(使用者類)
notificationpojo(通知類)--屬性見資料庫設計資訊表
資料庫表的設計:user_login(user_id,user_name,password....)nofitication(notification_id,title,content,createdt,creator_user_id....)
user_device(user_id,client_id,device_token)(ios個推資訊通過device_id傳送,andorid通過client_id傳送)
個推api設計:
1.基本配置資訊類
public class gexinbaseinfo
public class transimissioncontentpojo implements serializable
public void setcontentid(string contentid)
}
3.建立通知資訊的工廠類
public class notitemplatefactory
//ios
public static apnpayload.dictionaryalertmsg getdictionaryalertmsg(string title, notificationpojo npojo)
}
4.個推傳送資訊工具類
public class gexinmpushutil
return targetlist;
}protected igtpush push;
public gexinmpushutil()
public static gexinmpushutil getinstance()
return instance;
}//andorid有通知
public void push(final notificationtemplate notificationtemplate, final listcidlist)
});}
//andorid透傳,無通知
public void push(final transmissiontemplate transmissiontemplate, final listcidlist)
});}
//將使用者id與client_id繫結記錄在個推服務上
public boolean bind(string alias, string cid)
//解綁
public boolean unbind(string alias, string cid)
//ios推送
public void pushapn(final apnpayload.dictionaryalertmsg alertmsg
, final listdevicetokens, string content)
}
邏輯設計:使用者登入andorid攜帶client_id,ios端攜帶device_token,檢查user_device中是否有記錄user_id與 client_id或user_id與device_token的組合,如果沒有插入組合,並且繫結這組資訊
登出登入:
在傳送通知的方法中,加入推送的**:..............前面的**使用者獲取notificationpojo npojo(通知內容),
listsendusers(傳送的使用者id)
listlistalias = new arraylist<>();
if (sendusers != null && !sendusers.isempty())
}listdevicetokens = new arraylist<>();
listclientids = new arraylist<>();
if (listalias != null && !listalias.isempty() && listalias.size() != 0)
transimissioncontentpojo pojo = new transimissioncontentpojo(transimissioncontentpojo.type_noti);
pojo.setcontentid(notificationpojo.getnotificationid());
notificationtemplate template = notitemplatefactory.producenotifromnoti(notificationpojo);
if (clientids.size() != 0 && !clientids.isempty())
gexinmpushutil.getinstance().push(template, clientids);
apnpayload.dictionaryalertmsg alertmsg = notitemplatefactory.getdictionaryalertmsg(notificationpojo.gettitle()
,notificationpojo);
if (devicetokens.size() != 0 && !devicetokens.isempty())
gexinmpushutil.getinstance().pushapn(alertmsg, devicetokens,new gson().tojson(pojo));
.................這樣就可以將推送資訊傳送出去了
其中selectdevicetokens(listalias)的mybatis**如下:
(使用mybatis的sql如下
如果動態使用平台提供的API
開發工具的安裝目錄下會有include,lib目錄,這兩個目錄下存放著os提供的api的宣告以及經過封裝的一些類以方便程式設計師開發,封裝的類提供的服務大多通過呼叫os的api來實現,而真正提供os的api實現的卻在乙個個dll中。我們想要使用這些api或經過封裝的類的服務時,一般做法如下 test...
c 跨平台技術學習 三 使用標準API
posix.1 api定義了大量的函式,在各方面的功能都很豐富,下面對其進行介紹 它是乙份描述了at t unix system v作業系統的文件,與posix.1保持一致,是它的乙個超集。svid由基礎系統和擴充套件定義,它只定義了c程式設計介面,沒有定義任何使用者級別的命令,基礎系統更進一步細分...
日均數十億訪問量!解讀個推API閘道器高能演進
近日,個推服務端技術專家李白受邀參與segmentfault d day 線上技術直播活動,與來自頭部網際網路企業的後端技術專家們共探 後端架構演進之路 李白以 api閘道器演進之路 為主題,分享了個推基於golang進行api閘道器建設的實踐經驗和深度思考。以下為李白演講乾貨整理 api閘道器之源...