如何向用户通知Android应用程序更新?

我已经build立了一个现在在Play Market上的Android应用程序。 我会不时更新它,并且希望让用户知道新版本可用。

我怎样才能发送通知更新的应用程序的用户?

你不需要做任何具体的事情。 由于您提到您正在使用Android Play,因此更新通知已由Google Play处理。

你只需要更新versionCode更高的APK versionCode ,谷歌播放应该做的rest。

如果想要通过google play获得新版本的通知,每个手机用户都可以使用,如果要在默认情况下启用,则由每个手机的制造商决定。

如果您处于“要求”用户更新到新版本以便与某种协议forms兼容的情况,或者您有一个类似的用例(其中某个服务器组件位于某处),则可能需要通知基于关于什么是最新版本的信息,在UI中的潜在版本冲突的用户。

这个信息可以直接从谷歌播放抓取,但是@Yahel在这个问题中指出谷歌播放是一个封闭的系统,没有官方的API,你可能需要依靠不可预知的未公开的API。 这里有一个非官方的API库 。

这只留下一个选项,即将这些信息保存在您自己的服务器上。 如果你已经有一个服务器端,这可能是微不足道的。 简单地把最新版本放在一个XML文件中,然后定期从代码中检索。 如果版本代码已过期,请在您的用户界面中触发通知。 这里是一个示例实现 。

我希望这可以帮到你 :-)

您可以通过很多方式来完成此操作,具体取决于您希望用户何时能够看到有更新可用。

如果您希望用户在应用程序启动时了解更新,只需创build一个实用程序方法(位于main / first Activity的onCreate方法内),以检查Google Play中是否有新版本可用。 如果是,则显示一个警告对话框,其中包含一条相关消息和一个Intent,当用户单击警报对话框的正面button时,该对话框会在Google Play中打开您的应用程序。 如果您定期更新应用程序,则每次启动应用程序时,用户都会继续收到此警报对话框,因此可能会感到恼火。 因此,这不是最好的方法。

如果您希望用户在手机上获取通知(而不是在用户启动应用程序时),则可以使用AlarmManager类来安排后台服务,该服务会定期检查更新。 如果服务发现升级实际上可用,请发布通知,以便在Google Play中打开您的应用。

当然,另一种方法是把它交给操作系统本身。 如果用户没有为您的应用程序设置“自动更新”首选项,则用户将定期收到有关您的应用程序以及任何其他应用程序可用更新的通知。 但并不是所有的用户都在其设备上启用背景数据,所以这不是完全可靠的。

最后,你必须尊重用户的喜好。 如果用户不想自动更新应用程序,或者不想在启动应用程序时看到唠叨的对话框,则不要提醒用户有关更新。

在我看来,你应该创build一个喜欢“定期检查更新”的PreferenceActivity ,它可以在你的应用程序中设置。 如果已经确定了,那就在自己的服务中做好必要的工作。 甚至可以让用户select服务将检查更新的时间段。

我希望这有帮助!

使用这个: https : //www.push-link.com/

Google Play会通过通知栏通知您的用户该应用程序有更新。

如果您自己设置通知系统,可能的结果是,尽pipe用户会尽早得知更新通知,但当他/她去Google Play安装更新时,该更新还不可用。 这是因为从“发布”应用/更新到Play上出现的时间都有滞后。 告诉你的用户,当更新不可用时有一个更新只会导致混乱和沮丧。

我的build议是:坚持使用Google的更新通知系统,不要担心在15分钟内尽快为用户提供更新。

有些人使用Android Cloud-to-Device Messaging (C2DM)来通知用户更新。 我不认为我会打扰,因为我认为Google Play已经做了很好的通知我的更新,实施C2DM为编写应用程序(因为它需要一个服务器组件)增加了一个全新的维度。 但是,也许您希望为用户提供比Google Play更丰富的更新通知。

上面的答案是Davek804的错误。 android:versionCode是一个整数值,表示应用程序代码的版本,相对于其他版本,所以使用“1.5b”是不正确的。 改用“15”(或“150”)

还有一个非常好的方法来检查版本,并给用户在应用程序通知,或者当你想强制更新应用程序,如果你可以决定你的应用程序与服务器的第一个连接。在第一个请求的响应,你可以发送当前版本的应用程序存储在您的服务器上,然后在客户端上,您可以采取适当的措施。 这种方法的优点 –
1 – 没有额外的请求版本号。
2 – 这也适用,如果你下载的应用程序以外的谷歌Playstore。
3 – 如果你想检查你的应用在交易前的特定操作(如果你添加一个新的支付网关),你也可以使用这个想法。

不知道你是否想走更多的里程。 你可以尝试谷歌appengine,它为您的应用程序提供版本号,让你的Android应用程序检查appengine,看看是否有一个新的版本,当应用程序启动。 这样,如果你的应用程序在谷歌游戏市场或亚马逊应用程序商店没有关系,也没有通过sideloading没有这两个安装在手机上。 为了在json中提供应用程序版本而设置appengine并不是很困难。 将“Hello World”stringreplace为您的应用版本名称…

这可以使用一个简单的web服务,只是这是获得成功的方法之一。

即,当应用程序启动时,用当前版本的用户应用程序击中该web服务,并且在服务器上,您需要检查是否有新版本可用(必须维护最新版本的应用程序),并将相应的响应用户。 如果有更新版本可用,则提示用户下载最新版本的应用程序,如果没有最新版本可用,则允许用户继续。

希望至less有一些东西对你有用。

有两个模型基本上用来解决这个问题。

 Pull based Push Based 

它取决于特定系统的体系结构或devise,决定是使用拉式还是推式机制。

对于基于拉的模型,您只需向有关的服务器发出一个关于新版本应用程序的http请求。 当前的应用程序版本号可以保存在Android应用程序的SQLLite中。 这可以提供给服务器,新版本可以在服务器上进行检查。

对于推送机制,您可以使用C2DM推送通知服务。详情请参阅http://code.google.com/android/c2dm/

为您的问题find一个很好的解决scheme:假设您想在应用程序启动时手动检查版本更新,并通知您的用户新的更新。

步骤1: 下载android-market-api (不是.jar文件,完整的项目!)

第2步:将其导入eclipse后,在您的活动中写入以下代码:

 MarketService ms = new MarketService(activity); ms.level(MarketService.REVISION).checkVersion(); 

现在,我们需要修改MarketService.java,因为它似乎被打破了。

第3步:重写callback方法并添加以下方法

 protected void callback(String url, JSONObject jo, AjaxStatus status){ if(jo == null) return; String googlePlayversion = jo.optString("version", "0"); String smartphone_version = ""; PackageInfo pInfo; try { pInfo = act.getPackageManager().getPackageInfo(act.getPackageName(), 0); smartphone_version = pInfo.versionName; } catch (NameNotFoundException e) {} boolean new_version_avaible = compare(smartphone_version, googlePlayversion); if(new_version_avaible){ showUpdateDialog(jo); } } private static boolean compare(String v1, String v2) { String s1 = normalisedVersion(v1); String s2 = normalisedVersion(v2); int cmp = s1.compareTo(s2); String cmpStr = cmp < 0 ? "<" : cmp > 0 ? ">" : "=="; System.out.printf("result: "+"'%s' %s '%s'%n", v1, cmpStr, v2); if(cmpStr.contains("<")){ return true; } if(cmpStr.contains(">")||cmpStr.contains("==")){ return false; } return false; } public static String normalisedVersion(String version) { return normalisedVersion(version, ".", 4); } public static String normalisedVersion(String version, String sep, int maxWidth) { String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version); StringBuilder sb = new StringBuilder(); for (String s : split) { sb.append(String.format("%" + maxWidth + 's', s)); } return sb.toString(); } 

如果您想testing它,请将googlePlayversionstring修改为比本地版本更高的版本。

我使用的源代码比较方法是从哪里比较Java中的两个版本string?

通常,当您向Google Play上传新应用程序时,大多数用户会收到有关更新的通知,其中一些用户会根据自己的设置自动将应用程序下载到自己的设备。 如果你真的想从你的应用程序发出一个通知来要求他们更新(这样每个人都可以得到通知,无论他们的Google Play设置是什么,那么你将不得不做一个Web服务,返回最新版本的号码。然后可以比较你的应用程序和发布通知,你可以使用Google App Engine( https://developers.google.com/appengine/ ),因为它可能与eclipse和java一起工作,你可能已经有了。这种方法为你提供了大多数用户已经得到的东西,为你创造了很多工作。

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1.5b" android:versionName="1.5b"> 

当您将应用重新上传到Google Play时,如果这两个属性已从上次上传更改,则Google Play会自动向已安装您的应用的用户发送通知。 这是AndroidManifest文件。