需求概述
我們現在有一個需求,某一個活動需要拉新所謂的拉新一般是推App下載,這個用戶通過這個活動下載了App后,我們需要做到【在數據庫中記錄這個用戶下載這個App是通過那個二維碼渠道的,從效果上說,我們期望:
① 每個活動(渠道)在數據表中有一條記錄,而一旦有經過該渠道下載的App被打開后,該渠道的下載量會+1,算KPI的(單獨一條記錄,帶有時間戳)
② App首次打開時,如果檢測到了渠道上報后,還應該為該App打上一個全局的渠道標志,后續的所有請求都應該將此參數帶上,為后續產生訂單以及流水做准備
比如之前我們為H5與Server的Ajax請求約定的是這樣的:
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完成下載,這個是第二個前提:
② 我們每次是由一個統一的帶渠道因子的H5頁面,引導至App Store的
在上述基礎上,我們期望:有一個唯一的H5引導下載落地頁(這里基本會拋棄微信應用寶引導下載了)
這里初步的實現方案是:
打開H5落地頁時候,將這次活動的渠道號以及ip+ua+時間戳傳給server端記錄,如果在一定時間內,機型和ip成功匹配,則認為這次下載來源與這次渠道號
這里需要:
① Server端,提供一個接口,記錄當前渠道+ip+ua+時間戳+屏幕信息(所有能記錄的都記錄),提供一個渠道匹配判斷標志
② H5訪問落地頁的時候上報相關信息
③ Native首次打開的時候,調用native提供的判斷接口,給該次App打標志
這里提出了三個要素:
① H5落地頁
② server上報接口
② server檢查接口
而這種方案是不精確的,H5如果能拿到設備號這類唯一標識的話,便能大大提高准確性,然后無論微信jsdk或者Safari都是做不到的,而網上搜索的方案,提到了一個SFSafariViewController,似乎能達到共享cookie的作用,於是進行了一番探索。
SFSafariViewController
我們調研下來,在我們的場景下,大概是這么一個情況:
① 我們使用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/