咱們如今有一個需求,某一個活動須要拉新所謂的拉新通常是推App下載,這個用戶經過這個活動下載了App後,咱們須要作到【在數據庫中記錄這個用戶下載這個App是經過那個二維碼渠道的,從效果上說,咱們指望:html
① 每一個活動(渠道)在數據表中有一條記錄,而一旦有通過該渠道下載的App被打開後,該渠道的下載量會+1,算KPI的(單獨一條記錄,帶有時間戳)前端
② App首次打開時,若是檢測到了渠道上報後,還應該爲該App打上一個全局的渠道標誌,後續的全部請求都應該將此參數帶上,爲後續產生訂單以及流水作準備ios
好比以前咱們爲H5與Server的Ajax請求約定的是這樣的:web
1 var param = { 2 //公共參數 3 common: { 4 us: '渠道', 5 version: '1.0.0' 6 }, 7 other: '' // 業務參數 8 };
每次請求就一定會帶上業務參數,而us就是native須要帶的渠道參數,固然native的公共參數比前端多的多,需求明確後,咱們清理下iOS引導至App Store的通常流程。數據庫
這邊的通常流程是,咱們一個App活動,或者咱們一次推廣,通常來講都會用微信打開這個網址,這個是前提一:瀏覽器
① 咱們的一次下載來源於一次活動(推廣或者固定的下載地址),而微信是主要的打開設備微信
而後,咱們要引導至App Store,通常來講會訪問一個H5頁面(在微信中會引導在Safari瀏覽器中打開),而後由H5下載落地頁跳到App Store完成下載,這個是第二個前提:cookie
② 咱們每次是由一個統一的帶渠道因子的H5頁面,引導至App Store的app
在上述基礎上,咱們指望:有一個惟一的H5引導下載落地頁(這裏基本會拋棄微信應用寶引導下載了)dom
這裏初步的實現方案是:
打開H5落地頁時候,將此次活動的渠道號以及ip+ua+時間戳傳給server端記錄,若是在必定時間內,機型和ip成功匹配,則認爲此次下載來源與此次渠道號
這裏須要:
① Server端,提供一個接口,記錄當前渠道+ip+ua+時間戳+屏幕信息(全部能記錄的都記錄),提供一個渠道匹配判斷標誌
② H5訪問落地頁的時候上報相關信息
③ Native首次打開的時候,調用native提供的判斷接口,給該次App打標誌
這裏提出了三個要素:
① H5落地頁
② server上報接口
② server檢查接口
而這種方案是不精確的,H5若是能拿到設備號這類惟一標識的話,便能大大提升準確性,而後不管微信jsdk或者Safari都是作不到的,而網上搜索的方案,提到了一個SFSafariViewController,彷佛能達到共享cookie的做用,因而進行了一番探索。
咱們調研下來,在咱們的場景下,大概是這麼一個狀況:
① 咱們使用Safari打開一個頁面,而且操做cookie
② 在咱們的App中,SFSafariViewController這個庫能打開一個咱們給予的Url,而且這個網頁若是和上面是一個域名cookie是共享的
這個就頗有意思了,咱們就徹底能夠這樣作了:
① 訪問H5下載落地頁訪問接口上報時,Server往cookie種入惟一標識然後引導至App Store
② App首次打開時,以隱藏狀態打開上報頁面,由於同域名,會將Safari的cookie帶上,這裏也會帶上IP等標識
③ Server打標籤,若是判斷有cookie或者ip匹配則返回相關渠道
④ H5檢查頁,使用Hybrid交互,告訴native給該App打上標識
let vc = SFSafariViewController(url: URL(string: "http://domain.com/landing.html")!)
這裏方案肯定,而後開始落地實施試試狀況,後續在數據展現一塊以友好的方式展現出來,即是大數據的一環
參考文章:https://www.sensorsdata.cn/blog/analyze-distribution-channel-of-ios-app/