2011-04-05 75 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