2011-04-05 44 views
14

提示安卓應用程序用戶更新應用程序可以說我的Android應用程序版本0.1當前安裝在用戶的手機上。每次他們啓動我的應用程序我想檢查在Android Market中是否有不同的版本可以讓我們說這個版本是0.2。如果這兩個版本之間不匹配,我想顯示一個對話框,提示用戶升級應用程序。如果當前版本<>市場版本

我完全理解存在從Android Market本身到用戶的通知過程,但就我的Google Analytics數據而言,它並不是非常有效地提醒用戶升級到新版本的應用程序。

任何洞察將是非常有益的。謝謝StackOverflowers,你們搖滾!

+0

Duplicates:http://stackoverflow.com/questions/3057771/is-there-a-way-to-automatically-update-application-on-android和http://stackoverflow.com/questions/2175945/android-market-application-updates – user432209 2011-04-05 16:36:07

+3

這些帖子都沒有回答這個問題。 – 2011-04-05 16:39:40

+0

http://stackoverflow.com/questions/19244305/force-update-android-app-when-new-version-available/32942785#32942785 – AshuKingSharma 2016-12-26 17:33:11

回答

14

的Android Market是一個封閉的系統,並具有唯一的一個非官方的API,它可以在任何時間點突破。

最好的辦法是簡單地在您的Web服務器上託管一個文件(xml,json或簡單文本),您只需在市場上發佈應用程序時更新當前版本的應用程序。

然後,您的應用只需在啓動時取出該文件,檢查當前安裝的應用是否具有較低的版本號,並顯示一個對話框以警告用戶他已經滯後。

+0

這幾乎是我想過的。只是想檢查是否有API在那裏,谷歌已經提供檢查這個時候需要。 – Aakash 2011-04-05 16:52:55

4

看看這個庫,你可以用它來查詢Android Market的API

http://code.google.com/p/android-market-api/

+0

我看到這可能有效,但不是來自Google的「官方」API意味着它可能會失去支持或隨時破壞。我的推斷是否正確? – Aakash 2011-04-05 16:58:36

+0

這是一種可能性,是的。 – 2011-04-05 17:07:40

4

您可以使用此Android庫:https://github.com/danielemaddaluno/Android-Update-Checker。它旨在提供可重複使用的工具,以便在商店中存在任何更新的應用程序發佈更新時異步檢查。 它是基於使用Jsoup(http://jsoup.org/)來測試是否有新的更新確實存在解析在谷歌Play商店的應用頁面:

private boolean web_update(){ 
    try {  
     String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName; 
     String newVersion = curVersion; 
     newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + package_name + "&hl=en") 
       .timeout(30000) 
       .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") 
       .referrer("http://www.google.com") 
       .get() 
       .select("div[itemprop=softwareVersion]") 
       .first() 
       .ownText(); 
     return (value(curVersion) < value(newVersion)) ? true : false; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

,是「值」功能下(工作,如果值beetween 0-99):

private long value(String string) { 
    string = string.trim(); 
    if(string.contains(".")){ 
     final int index = string.lastIndexOf("."); 
     return value(string.substring(0, index))* 100 + value(string.substring(index + 1)); 
    } 
    else { 
     return Long.valueOf(string); 
    } 
} 

如果只想驗證beetween版本不匹配,您可以更改:

「值(curVersion)<值(NEWVERSION)」 與「值(curVersion)! = value(newVersion)「

+0

是不是從應用程序商店解析值過度殺傷?我會建議上面列出的方法之一 - 只需將密鑰存儲在服務器上並通過API調用獲取它。 – 2014-09-04 07:13:34

+0

的目標是檢查商店當前可用的最新版本(因爲發佈應用可能需要一段時間才能顯示)。但是,整個HTML大約是350KB或更多(這就是爲什麼@Nitin說「過度殺傷」)。如果有人喜歡這個解決方案,請確保您的應用只在WiFi連接可用時進行檢查。 – 2014-12-18 04:53:01

5

如果您希望避免讓您的後端服務器存儲您當前的應用程序版本(如接受的答案中所建議的那樣),則可以使用的另一個選項是使用Google Tag Manager(GTM)。

如果您已經在使用Google AnalyticsSDK,那麼您也可以使用GTM。

在GTM中,您可以在應用的容器中定義一個值,指定您的最新發布版本。例如:

{ 
    "latestAppVersion": 14, 
    ... 
} 

然後你就可以查詢該值當你的應用程序啓動並顯示用戶更新對話框提醒,如果有一個新的版本。

Container container = TagManager.getInstance(context).openContainer(myContainerId); 
long latestVersionCode = container.getLong("latestAppVersion"); 

// get currently running app version code 
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
long versionCode = pInfo.versionCode; 

// check if update is needed 
if(versionCode < latestVersionCode) { 
    // remind user to update his version 
} 
+0

您是否使用標籤或宏?如果宏你使用價值收藏?因爲我似乎無法使它工作。 – achabacha322 2015-03-19 20:28:46

+1

我使用宏值集合,這裏是從集合中完全複製粘貼:{「latestAppVersion」:30} – middlehut 2015-03-22 06:51:07

0

對於促使Android應用程序用戶更新應用程序,如果當前的版本不等於市場的版本,你應該首先檢查了市場上的應用程序版本,它與應用程序的設備上的版本進行比較。如果它們不同,它可能是可用的更新。在這篇文章中,我寫下了獲取設備上當前版本的市場和當前版本的代碼,並將它們進行比較。我還展示瞭如何顯示更新對話框並將用戶重定向到更新頁面。請訪問此鏈接:https://stackoverflow.com/a/33925032/5475941

相關問題