以编程方式检查Play商店的应用更新

我已将我的应用放在Google Play商店中。 它已经被我的公司的许多客户安装。 我了解应用如何升级的机制。

用户应该检查他们想要自动更新的每个应用程序在Playstore应用程序中的自动更新checkbox。 但是,有些用户没有选中它,或者没有首先检查它。

我写的应用程序是为护理行业,护理人员提供家庭护理。 我们的一些客户有1200名护理人员。 他们将不得不打电话给所有的照顾者到办公室去更新手机。 这显然是不能接受的。

有没有一种方法来以编程方式检查在Play商店中是否有我的应用程序的更新版本?

每次用户启动检查Play商店的应用程序时,是否可以运行代码? 如果有更新的版本,那么用户可以被定向到PlayStore。 这意味着检查自动更新并不是必须的。

提前致谢

马特

没有官方的Google API(我知道)支持这个。

您应该考虑从API获取版本号。

而不是连接到外部API或网页(如Google Play商店)。 在API或网页中有一些变化的风险,所以您应该考虑检查当前应用程序的版本代码是否低于您从自己的API获得的版本号。

只要记住,如果您更新您的应用程序,则需要在您自己的API中使用应用程序版本号更改版本。

我会推荐。

使用版本号在您自己的网站或API中创build一个文件。 (最终做一个cronjob,使版本更新自动,并发生错误时发送通知)

您必须从Google Play商店页面获取此值。

<div class="content" itemprop="softwareVersion"> 1.2.5 </div> 

如果在手机上使用的版本低于您自己的api /站点上显示的版本号,请检查您的应用程序。

显示表明她/他需要更新

你可以做的事情

版本号在自己的API

优点:

  • 版本更新出现问题时,您不必更新应用程序。

缺点:

  • API可以脱机
  • Play商店的网页可能会改变,所以你的版本'开膛手'不再工作。

Google Play商店的版本号

优点:

  • 你不需要一个API

缺点:

  • 当有事情发生变化时,您必须更新应用程序。
  • Play商店的网页可能会改变,所以你的版本'开膛手'不再工作。

在您的应用程序build.gradle文件中包含JSoup:

 dependencies { compile 'org.jsoup:jsoup:1.8.3' } 

并得到像现在的版本:

 currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; 

并执行以下线程:

 private class GetVersionCode extends AsyncTask<Void, String, String> { @Override protected String doInBackground(Void... voids) { String newVersion = null; try { newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=it") .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 newVersion; } catch (Exception e) { return newVersion; } } @Override protected void onPostExecute(String onlineVersion) { super.onPostExecute(onlineVersion); if (onlineVersion != null && !onlineVersion.isEmpty()) { if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) { //show dialog } } Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion); } 

有关更多详情,请访问: http : //revisitingandroid.blogspot.in/2016/12/programmatically-check-play-store-for.html

现在, Firebase Remote Config可能是一个可行的可靠解决scheme,因为谷歌没有公开任何API。

检查Firebase远程configuration文档

步骤1.创build一个Firebase项目并将google_play_service.json添加到您的项目中

2.在firebase控制台中创build“android_latest_version_code”和“android_latest_version_name”这样的密钥 – > Remote Config

3. Android代码

  public void initializeFirebase() { if (FirebaseApp.getApps(mContext).isEmpty()) { FirebaseApp.initializeApp(mContext, FirebaseOptions.fromResource(mContext)); } final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance(); FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); config.setConfigSettings(configSettings); } 

获取当前版本的名称和代码

 int playStoreVersionCode = FirebaseRemoteConfig.getInstance().getString( "android_latest_version_code"); PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0); int currentAppVersionCode = pInfo.versionCode; if(playStoreVersionCode>currentAppVersionCode){ //Show update popup or whatever best for you } 

4.保持firebase“android_latest_version_code”和“android_latest_version_name”与您当前的生产版本名称和代码保持一致。

Firebase远程configuration可在Android和iPhone上运行。

设置一个服务器,公开一个报告最新版本的HTTP URL,然后使用AlarmManager调用该URL并查看设备上的版本是否与最新版本相同。 如果不是popup消息或通知,并将其发送到市场进行升级。

有一些代码示例: 如何让用户从应用程序内检查最新的应用程序版本?

有AppUpdater库。 如何包括:

  1. 将资源库添加到您的项目 build.gradle
 allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } } 
  1. 将库添加到你的模块 build.gradle
 dependencies { compile 'com.github.javiersantos:AppUpdater:2.6.1' } 
  1. 将INTERNET和ACCESS_NETWORK_STATE权限添加到您应用的清单:
 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
  1. 添加到您的活动:
 AppUpdater appUpdater = new AppUpdater(this); appUpdater.start(); 

来自混合应用程序POV。 这是一个javascript的例子,我有一个更新可用页脚在我的主菜单上。 如果有更新可用(即configuration文件中的版本号小于检索的版本号,则显示页脚)。然后,这将引导用户访问应用/播放存储,然后用户可以单击更新button。

我也得到什么新的数据(即发行说明),并显示这些login模式,如果它是第一次在这个版本。

在设备就绪状态下,设置商店url

  if (device.platform == 'iOS') storeURL = 'https://itunes.apple.com/lookup?bundleId=BUNDLEID'; else storeURL = 'https://play.google.com/store/apps/details?id=BUNDLEID'; 

更新可用的方法可以随意运行。 每次用户导航到主屏幕时都会运行矿井。

 function isUpdateAvailable() { if (device.platform == 'iOS') { $.ajax(storeURL, { type: "GET", cache: false, dataType: 'json' }).done(function (data) { isUpdateAvailable_iOS(data.results[0]); }).fail(function (jqXHR, textStatus, errorThrown) { commsErrorHandler(jqXHR, textStatus, false); }); } else { $.ajax(storeURL, { type: "GET", cache: false }).done(function (data) { isUpdateAvailable_Android(data); }).fail(function (jqXHR, textStatus, errorThrown) { commsErrorHandler(jqXHR, textStatus, false); }); } } 

iOScallback:苹果有一个API,所以很容易得到

 function isUpdateAvailable_iOS (data) { var storeVersion = data.version; var releaseNotes = data.releaseNotes; // Check store Version Against My App Version ('1.14.3' -> 1143) var _storeV = parseInt(storeVersion.replace(/\./g, '')); var _appV = parseInt(appVersion.substring(1).replace(/\./g, '')); $('#ft-main-menu-btn').off(); if (_storeV > _appV) { // Update Available $('#ft-main-menu-btn').text('Update Available'); $('#ft-main-menu-btn').click(function () { openStore(); }); } else { $('#ft-main-menu-btn').html('&nbsp;'); // Release Notes settings.updateReleaseNotes('v' + storeVersion, releaseNotes); } } 

Android的callback:PlayStore你必须刮,因为你可以看到版本是相对容易抢和什么新的我采取的HTML,而不是文本这样我可以使用他们的格式(即新行等)

 function isUpdateAvailable_Android(data) { var html = $(data); var storeVersion = html.find('div[itemprop=softwareVersion]').text().trim(); var releaseNotes = html.find('.whatsnew')[0].innerHTML; // Check store Version Against My App Version ('1.14.3' -> 1143) var _storeV = parseInt(storeVersion.replace(/\./g, '')); var _appV = parseInt(appVersion.substring(1).replace(/\./g, '')); $('#ft-main-menu-btn').off(); if (_storeV > _appV) { // Update Available $('#ft-main-menu-btn').text('Update Available'); $('#ft-main-menu-btn').click(function () { openStore(); }); } else { $('#ft-main-menu-btn').html('&nbsp;'); // Release Notes settings.updateReleaseNotes('v' + storeVersion, releaseNotes); } } 

开放的商店逻辑是直截了当的,但为了完整性

 function openStore() { var url = 'https://itunes.apple.com/us/app/appname/idUniqueID'; if (device.platform != 'iOS') url = 'https://play.google.com/store/apps/details?id=appid' window.open(url, '_system') } 

确保Play商店和App Store已被列入白名单:

  <access origin="https://itunes.apple.com"/> <access origin="https://play.google.com"/> 

没有官方的GooglePlay API可以做到这一点。

但是你可以使用这个非官方的库来获取应用程序版本数据。

而且,如果上述不适合您,您可以随时通过http连接到您应用的页面(例如https://play.google.com/store/apps/details?id=com.shots.android&hl=en )和parsing“当前版本”字段。