以编程方式检查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库。 如何包括:
- 将资源库添加到您的项目 build.gradle :
allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
- 将库添加到你的模块 build.gradle :
dependencies { compile 'com.github.javiersantos:AppUpdater:2.6.1' }
- 将INTERNET和ACCESS_NETWORK_STATE权限添加到您应用的清单:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- 添加到您的活动:
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(' '); // 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(' '); // 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“当前版本”字段。