$push_ios = XingeApp::PushAllIos(accessID,secret,$content,XingeApp::IOSENV_PROD);11
創(chuàng)新互聯(lián)公司擁有十載成都網(wǎng)站建設(shè)工作經(jīng)驗,為各大企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作服務,對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、成都App定制開發(fā)、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項目的能力。
我推送的時候設(shè)置的環(huán)境是發(fā)布環(huán)境的,而app還沒有正式上線,應該使用IOSENV_DEV
IOSENV_PROD 表示推送生產(chǎn)環(huán)境; IOSENV_DEV 表示推送開發(fā)環(huán)境。
推送包括兩種形式和兩種方法。兩種方法包括api推送(即后臺推送)和極光web控制臺推送。
兩種形式指的是推送包含推送通知以及推送消息,注意:通知會在蘋果通知中心顯示,但是消息并不會走apns,即app在后臺或者未運行時不會以通知的形式顯示到手機頁面上,但是每次app啟動并運行的時候會通過回調(diào)方法調(diào)用獲得推送消息。
往往需要針對個人推送,這里需要用到極光推送中的別名,或者標簽。其原理是用戶在登陸成功時,通過用戶唯一身份ID進行別名或者標簽注冊,在下次需要針對個人推送時,增加通過別名或者標簽推送。
極光推送作為較成熟的推送平臺,通過集成基礎(chǔ)操作。為客戶端以及服務端節(jié)省了大量時間來實現(xiàn)推送效果。
就iOS端來說要注意整體流程,首先,iOS端推送時分為兩個狀態(tài),開發(fā)環(huán)境與生產(chǎn)環(huán)境,每個環(huán)境在app development里應做好相應的證書并導出(極光集成時需要用到p12文件),開發(fā)環(huán)境與生產(chǎn)環(huán)境需要在極光控制臺設(shè)置。
極光推送個性化推送滿足用戶多種推送需要,有效提升用戶體驗,利用大數(shù)據(jù)人工智能技術(shù),實現(xiàn)智能用戶分群,提升消息點擊率,推送安全包確保推送內(nèi)容準確,拒絕運營事故。
其實也沒有什么本質(zhì)的區(qū)別,都是一種通知形式,系統(tǒng)的推送可能會更效率一些,調(diào)用的SDK函數(shù)可能和普通的應用程序不一樣。。
App推送消息是我們常見的一種app消息提醒方式。
我們的實現(xiàn)需要第三方的支持,實現(xiàn)方式是后臺通過接口將Push請求發(fā)送至第三方,第三方實現(xiàn)在App所在設(shè)備上的推送。
在與推送平臺交互時,后臺需要向第三方發(fā)送兩部分信息,推送目標終端標示+推送內(nèi)容
APP推送需要定位目標終端,也就是說要給那臺設(shè)備進行推送,
簡單的情況下,單設(shè)備推送,我們需要拿到一個終端ID的概念,用于定位目標設(shè)備,
注:不同渠道中使用的單設(shè)備ID方式也不盡相同,以下用TokenID來表示這個終端ID的概念。
而實際推送渠道中往往還有自定義的功能,比如通過打標簽的方式將TokenID進行劃分,達到批量差異化的效果。
即指通過API接口參數(shù)的定義終端上收到的Push消息的內(nèi)容和格式。
其中IOS的推送消息在展示上區(qū)別于安卓的一點是沒有title,title的部分只能是默認的APP名稱,而安卓的部分雖然默認值也是APP名稱,但是也支持自定義title。
通過上述的處理邏輯可得知,后端首先需要登記客戶端的TokenId,然后保持TokenID的有效性更新,然后在需要發(fā)送APP推送時拿到用戶的有效TokenID,
然后使用TokenID和已有的內(nèi)容信息通過API與三方Push服務交互,完成推送。
即后端的實現(xiàn)分為兩部分:
1、TokenID的登記
2、App Push API的調(diào)用
注:以下示例中有兩個元素為本項目的特殊情況:
其中product_id是因為當前項目中客戶端同時有多個版本,不同版本需要推送獨立處理,但在同一張表內(nèi)統(tǒng)一記登記;
而login_id跟member_id同時存在是因為當前系統(tǒng)中存在共享賬戶的情況,一般賬號賬戶一對一的情況login_id和member_id是綁定的,不需要同時重復登記。
pre
/ ============================================================== /
/* Table: sys_app_push_token */
/ ============================================================== /
create table sys_app_push_token
(
record_id int(11) not null auto_increment,
login_id int(11),
member_id int(11),
push_token varchar(200),
visit_device int(4) comment '3:Android;4:IOS',
product_id varchar(20) default '0' comment '',
push_channel int(4) default 1 comment '1:IOS信鴿,2:華為,3:小米,4:極光',
nstatus int(4) not null default 0 comment '狀態(tài):0:申請中;1:生效;2:失效;3:刪除;4:歷史記錄',
create_userid int(11) not null default 0,
create_time varchar(20) character set utf8 not null default "",
edit_userid int(11) not null default 0,
edit_time varchar(20) character set utf8 not null default "",
this_remark text,
description text,
create_ordernum varchar(30) character set utf8 comment '記錄創(chuàng)建時的流水號',
last_ordernum varchar(30) character set utf8 comment '記錄最后一次編輯時的流水號',
primary key (record_id)
)
ENGINE=InnoDB
DEFAULT CHARACTERSET=utf8
COLLATE=utf8_general_ci
auto_increment=10000
row_format=COMPACT;
alter table sys_app_push_token comment 'app推送token表';
/ ============================================================== /
/* Index: Index_1 */
/ ============================================================== /
create index Index_1 on sys_app_push_token
(
record_id
);
/pre
注:其中,推送渠道絕對在做Push時使用哪家API,參數(shù)的判定交由客戶端進行處理,后端直接登記判定結(jié)果。
pre
@Transactional(readOnly=false)
publicbooleanuploadMemberPushTokenEnt(TrainVansContext trainVansContext) {
try{
//check already data
trainVansContext.getTrainVansRequest().put("login_id", TrainVansUtils.getMV(trainVansContext.getTrainVansRequest(),"login_login_id"));
// get All memberRelation
trainVansContext.getTrainVansRequest().put("relation_type", TrainVansUtils.getMV(trainVansContext.getTrainVansRequest(),"visit_role"));
List memberRelationList = SpringContextHandler.getBean(MemberService.class).getRelateMemberListByLoginId(trainVansContext);
for(Map memberRelateMap : memberRelationList){
//
trainVansContext.getTrainVansRequest().put("member_id", TrainVansUtils.getMV(memberRelateMap,"member_id"));
Map tokenMap = SpringContextHandler.getBean(AppPushService.class).getPushTokenMapByLoginMap(trainVansContext.getTrainVansRequest());
//disable already data
if(tokenMap !=null){
if(!TrainVansUtils.getMV(tokenMap,"push_token").equals(TrainVansUtils.getMV(trainVansContext.getTrainVansRequest(),"push_token"))){
//
trainVansContext.getTrainVansRequest().put("record_id", TrainVansUtils.getMV(tokenMap,"record_id"));
if(!SpringContextHandler.getBean(AppPushService.class).updateDiabledThePushToken(trainVansContext)){
thrownewRuntimeException("TranVans_Operate_Exception");
}
//insert new data
if(!SpringContextHandler.getBean(AppPushService.class).insertPushTokenRecord(trainVansContext)){
thrownewRuntimeException("TranVans_Operate_Exception");
}
}
}else{
//insert new data
if(!SpringContextHandler.getBean(AppPushService.class).insertPushTokenRecord(trainVansContext)){
thrownewRuntimeException("TranVans_Operate_Exception");
}
}
}
returntrue;
}catch(Exception e) {
TrainVansUtils.setRetInfo(trainVansContext,"10005001","Register TokenID Error");
e.printStackTrace();
thrownewRuntimeException("TranVans_Operate_Exception");
}
}
/pre
注:方法外部有一個關(guān)于對應本賬號的對賬戶列表的遍歷,遍歷中的處理部分為TokenID的登記處理操作。
推送渠道:
APP推送不僅僅要求在APP打開狀態(tài)時或者后臺運行時進行消息推送,更多的場景是在移動終端關(guān)閉APP的場景下進行消息推送,
渠道的優(yōu)劣無非在于兩個維度,送達率和送達效率。
其中安卓推送的渠道較為雜亂,其中華為和小米提供的PUSH服務對于自平臺的移動終端支持的較為完善,而沒有廠商提供PUSH服務的終端只能通過
第三方服務來進行對接。
對于現(xiàn)有的這些渠道進行如下總結(jié):
1、IOS:信鴿推送,這個推送在我門公司中經(jīng)歷了三個項目,推送效果穩(wěn)定。API接入也方便,是IOS端的不二選擇。
2、Android-華為:華為自平臺。
3、Android-小米:小米自平臺。
4、Android-其他:目前使用的是“極光推送”。在理想狀態(tài)下送達率和送達效率表現(xiàn)很好,但并不如以上三家渠道穩(wěn)定。
在進行調(diào)用時可根據(jù)之前定義的push_channel分發(fā)給各自的渠道,各渠道的具體對接請各自查看官網(wǎng),API都很完善。
APP PUSH的定義為在手機終端鎖屏狀態(tài)下通知欄展示或在操作前臺頂端彈出的消息通知,點擊后可喚起對應的APP,并在APP內(nèi)跳轉(zhuǎn)到指定頁面。
push消息是通知用戶,引導用戶進行參與活動、購買產(chǎn)品的重要手段,而且PUSH消息也可以引導用戶查看消息,喚起APP提高日活,是一塊重要的流量。
從應用的功能來劃分,主要分為三類應用,第一類是IM類APP,如微信、QQ等;第二類是新聞資訊類,如華爾街見聞等;其余暫歸為為工具類,比如支付寶、美團等。
每種類型APP對PUSH的需求也不同,IM類APP追求實時、穩(wěn)定的觸達,此類APP一般通過自己的長連接進行消息推送,保證用戶在收到消息的時候能夠?qū)崟r地接收消息消息。另外,一些安卓廠商也會給予頭部APP的進程一定保護,對相關(guān)的進程納入白名單,在清理進程的時候予以忽略。
新聞資訊類的APP與工具類APP的PUSH推送機制基本一致,僅在頻率控制上有差異,新聞資訊類由于新聞資訊較多,需要將突發(fā)新聞及時推送給用戶。
由于目前工具類的APP占大多數(shù),本文將主要講解工具類APP的常見推送機制。
PUSH消息在消息系統(tǒng)創(chuàng)建好后進入發(fā)送階段,服務端需要根據(jù)用戶終端信息進行路由,如果是IOS系統(tǒng),那么會調(diào)用蘋果自身的推送通知服務(APNs),如果用戶的手機是安卓系統(tǒng),那么根據(jù)不同的廠商去調(diào)用不同的廠商SDK。
對于不同的系統(tǒng)版本,支持的消息展示形式也是不同,比如IOS10之后,當APP在前臺時,是否通知欄展示;此樣式可以根據(jù)產(chǎn)品需求來選擇,有服務端傳輸相應通知方式的值即可。如果用戶的手機非五大廠商內(nèi)的手機,可以通過自己搭建的長連接或者使用第三方服務進行推送。
如果不是自己直接對接廠商通道,那么內(nèi)部的服務端可能無需做過多較為復雜繁瑣的開發(fā)工作,通過接入第三方消息推送平臺來實現(xiàn)消息的推送,比如信鴿、個推等。多數(shù)的通道會將消息是否成功推送到客戶端SDK的回執(zhí)數(shù)據(jù)反饋給發(fā)送方,需要提供回調(diào)地址。
4.1 推送通道
通道類型一般分為三類:廠商通道、第三方推送服務平臺、長連接。
廠商通道是手機終端廠商推出的推送服務,通過接入廠商SDK,內(nèi)部服務端可以將消息推送到手機系統(tǒng)的服務端,再下發(fā)至客戶端內(nèi)部的廠商SDK,由操作系統(tǒng)進行相應展示,點擊后喚起相應APP,這樣可以避免APP進程被殺死后消息無法觸達用戶,因此觸達率較高。
第三方推送平臺是推送服務公司自己搭建相關(guān)的消息服務。并且各個APP使用了同一個平臺的推送服務時,客戶端都是集成同一個第三方推送平臺的SDK,因此形成了一個推送聯(lián)盟,當聯(lián)盟中的其中一個APP的消息進程沒有被殺死的時候,其他的APP也可以利用進行通知用戶,形成了相互喚起,提高觸達率。
經(jīng)過一些場景的測試,相互喚起的成功率并不是很高,需謹慎結(jié)合自身場景評估。為了提高觸達率,第三方推送平臺也會集成各大廠商的SDK進行推送。
長連接就是建立手機與服務端的一條鏈路進行消息數(shù)據(jù)推送,通過長連接也可以進行APP狀態(tài)監(jiān)控,但完全由長連接推送且保證觸達的穩(wěn)定,需要投入的研發(fā)資源較多,且需盡量避免自己的長連接進程不要被操作系統(tǒng)殺死。
4.2 優(yōu)劣勢對比
APP push功能的搭建需要依據(jù)產(chǎn)品自身的情況和公司可投入的資源成本為主,在不同的階段應該追逐不同的目標。
5.1 推送賬號
推送時客戶端的PUSH SDK均會根據(jù)用戶的設(shè)備號生成一個對應關(guān)系的TOKEN。
在SDK內(nèi)部,如果使用的是第三方推送服務,則去第三方的SDK注冊;如果是廠商,則去商城SDK注冊;如果使用自己長連接,則去自己的SDK進行注冊,作為后續(xù)推送的標識用戶的唯一ID。
5.2 消息路由
消息路主要見上述推送流程的講解,此處主要講解根據(jù)不同的業(yè)務場景,可能會定向推送給不同版本APP的用戶。因此服務端在通道能力路由的時候,不僅需要能夠區(qū)分通道,還要進一步能夠針對用戶的手機終端進行更加精細化的差異推送。
此外,消息通道并一定是100%穩(wěn)定,如果下游通道出現(xiàn)問題,服務端需能夠?qū)⒂捎谕ǖ绬栴}導致的消息路由到備用通道去發(fā)送,以保證業(yè)務穩(wěn)定觸達。
5.3 全量推送
一般來說,對于公司內(nèi)部運營或公司的相關(guān)數(shù)據(jù)均是以產(chǎn)品的customer id為準,用戶數(shù)據(jù)系統(tǒng)對接消息系統(tǒng)時也多為customer id,因此需建立customer id與推送TOKEN的關(guān)系,便于運營針對用戶進行推送。但對于一些場景會需要針對未登錄的用戶也進行推送,即全量推送;比如突發(fā)重大新聞資訊、大促等活動,所以運營系統(tǒng)需要提供全量推送功能,針對所有TOKEN進行推送。
上報數(shù)據(jù)包括觸達 點擊 關(guān)閉 退出 注冊等數(shù)據(jù)。
對于所有方式的觸達消息,都離不開觸達與點擊,觸達的數(shù)據(jù)通過廠商的需要廠商回調(diào)上報,點擊數(shù)據(jù)可以由SDK上報服務端。
對于push的關(guān)閉,也是需要進行考量的,來評估push是否過度發(fā)送,打擾到了用戶。關(guān)閉數(shù)據(jù)有兩部分,一部分為app內(nèi)部的關(guān)閉,sdk直接上報給服務端即可;另一部分為用戶在手機操作系統(tǒng)上關(guān)閉了對應app的push,需要APP在前臺時,sdk調(diào)用手機終端相關(guān)方法獲取該用戶是否關(guān)閉了系統(tǒng)通知,然后上報至服務端。
注冊數(shù)據(jù)即用戶首次啟動APP時,去相關(guān)sdk注冊token。
用戶退出賬號時,sdk需要上報服務端,解除token與customer id的綁定關(guān)系。
7.1 強提醒 不留痕
push由于是app自己的通知渠道,是運營的一個重要工具。
如果用戶未關(guān)閉PUSH通知的話,push可以從通知欄彈出進行消息顯示,具有一定的強提醒性,但PUSH點擊跳轉(zhuǎn)后便消失,沒有痕跡,因此針對于重點的通知消息,需要在APP內(nèi)設(shè)置消息中心,在PUSH的同時留下通知記錄。
7.2 消息樣式
對于各家PUSH來說,一些營銷消息會加入EMOJI表情來吸引用戶點擊,這也是一個吸引用戶點擊的一個小方法,只要服務支持傳輸約定好的EMOJI碼就可以了。
目前安卓系統(tǒng)也支持富媒體推送,推送包含圖片、語音等形式,對于資訊類的APP可以增加縮略圖,吸引用戶點擊。目前來看,語音場景還有點挖掘。
7.3 IOS和安卓
由于APP是基于手機操作系統(tǒng),因此對于IOS和安卓的推送的流程及功能基本相同,只不過細節(jié)和方法上略有不同,且國內(nèi)安卓產(chǎn)商都在安卓系統(tǒng)上進行了一定改造,導致國內(nèi)安卓廠商標準各不相同,需要開發(fā)同學仔細對接各個廠商。
觸達率的提升需要從消息創(chuàng)建到實際通知到用戶的建立完整流程,細化每一個交互環(huán)節(jié),發(fā)現(xiàn)影響觸達率的主要瓶頸,并針對性地進行解決或優(yōu)化方案。
除此之外,未采用廠商通道的消息也可以采用自己的長連接和其他推送平臺服務同時多條推送,在客戶端的SDK內(nèi)增加針對同一罅隙流水號的去重,這樣可以也可以提高一部分消息的觸達率。
標題名稱:ios信鴿推送開發(fā)環(huán)境,ios信鴿推送開發(fā)環(huán)境怎么關(guān)閉
網(wǎng)頁路徑:http://chinadenli.net/article14/dsshsge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導航、小程序開發(fā)、響應式網(wǎng)站、網(wǎng)站制作、網(wǎng)站排名、電子商務
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)