Android中如何判斷升級用戶

最近一個需求是在請求參數(shù)中添加判斷是否為升級用戶的字段,簡單來說,當前用戶使用版本為1.1,如果是從0.9或者1.0升級過來則算老用戶,如果是直接安裝的1.1則為新用戶,新用戶升級到1.2后就會自動變?yōu)槔嫌脩簟7椒ū容^多,我這里列舉三種:

借助數(shù)據(jù)庫升級

這是我最先想到的方法, 我們都知道,在數(shù)據(jù)庫的version發(fā)生變化時SQLiteOpenHelper的onUpgrade函數(shù)會被調(diào)用,因此這可以作為判斷升級用戶的隱性標志。但這種方法問題比較多:

  • 有些版本升級并不一定會伴隨著數(shù)據(jù)庫的升級,造成數(shù)據(jù)的不準確。
  • 在某些特定場景下可能需要在同一版本中做多次數(shù)據(jù)庫升級操作,雖然這并不推薦,但業(yè)務至上的原因,什么樣的代碼都可能存在,還是可能造成數(shù)據(jù)不準確。

手動存儲安裝版本信息

手動存儲版本信息是個性化比較強的一種做法,我們在應用啟動時可以檢測sp中是否紀錄install_version這個值,如果未存在,則將當前版本號寫入,當需要判斷升級用戶時只需要判斷install_version的值與當前版本號是否相等即可。但這同樣存在某些問題:

  • 用戶手動或者程序由于某些原因清除數(shù)據(jù)就會造成數(shù)據(jù)不準確。

  • 對于已發(fā)布的版本似乎無法補救,例如1.1中加的需求,但之前已經(jīng)發(fā)布多個版本。

借助PackageInfo

由于上面兩種自定義的邏輯都不能很好的滿足我的需求,所以我將希望寄托于系統(tǒng),于是翻看了PackageManager相關的代碼,果然在PackageInfo中找到了兩個有用的值:firstInstallTime,lastUpdateTime,根據(jù)注釋的描述,firstInstallTime表示應用第一次安裝的時間,lastUpdateTime表示應用最后一次更新的時間,并且這兩個值由系統(tǒng)維護,清除數(shù)據(jù)也不會影響結(jié)果,所以當firstInstallTime != lastUpdateTime時表示當前為升級用戶。核心代碼如下:

    PackageManager pm = context.getPackageManager(); 
    PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);     
    return pi.firstInstallTime == pi.lastUpdateTime;       

這種方法的確很不錯,但如果需求嚴苛的話,還是會有一些問題,

  • 平級、降級安裝也會更改lastUpdateTime的值,同樣可能造成結(jié)果不準確。

  • 支持的最小版本是9,雖然目前9以下的版本已經(jīng)很少了

總結(jié)

三種方法各有優(yōu)缺點,希望可以給大家一些借鑒作用。如果有更好的方法,歡迎給我留言。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容