Nee*_*hah 9 android auto-update
我在Playstore上有一个应用程序.知道我想要的是当Playstore上有新的更新时,用户在尝试使用该应用程序时应该弹出一个更新应用程序.如果他没有更新应用程序,它应该关闭应用程序.例如:我想强制用户更新应用以继续使用.
据我所知,Google Play没有为此提供任何类型的API,因此您必须手动检查.
但我可以告诉你一种强制用户使用最新版本进行更新的方法.
一种方法是向用户发送推送通知,当您收到通知时,您将用户重定向到Playstore.
第二种方法更长,但这是一种适当的确定方法.您在服务器上创建Web服务,该服务器存储最新版本的应用程序.每当您的应用运行时,
MainActivity您发布请求到Web服务并检查应用程序中的版本是否是最新的您不需要直接强制更新,当您推送更新时,Play 商店实际上会自动为用户更新您的应用程序。除非您更改了您的权限,否则用户无需执行任何操作。
我绝对会建议让 Play 商店自己做事……但我在一个应用程序中做了类似的事情。
像这样的东西应该告诉你 Play 商店的更新日期和版本:
SimpleDateFormat formatter = Dates.getSimpleDateFormat(ctx, "dd MMMM yyyy");
String playUrl = "https://play.google.com/store/apps/details?id=" + appPackageName;
RestClient restClient = /* Some kind of rest client */
try {
String playData = restClient.getAsString(playUrl);
String versionRaw = findPattern(playData, "<([^>]?)*softwareVersion([^>]?)*>([^<]?)*<([^>]?)*>");
String updateRaw = findPattern(playData, "<([^>]?)*datePublished([^>]?)*>([^<]?)*<([^>]?)*>");
Date updated = formatter.parse(updateRaw.replaceAll("<[^>]*>", "").trim());
String version = versionRaw.replaceAll("<[^>]*>", "").trim();
_currentStatus = new PlayStatus(version, updated, new Date());
} catch (Exception e) {
_currentStatus = new PlayStatus(PlayStatus.UNKNOWN_VERSION, new Date(0), new Date(0));
}
Run Code Online (Sandbox Code Playgroud)
我的 PlayStatus 类有一个如下所示的方法:
public boolean hasUpdate() {
int localVersion = 0;
int playVersion = 0;
if (! versionString.equals(UNKNOWN_VERSION)) {
localVersion = Integer.parseInt(BuildConfig.VERSION_NAME.replace(".",""));
playVersion = Integer.parseInt(versionString.replace(".",""));
}
return (playVersion > localVersion);
}
Run Code Online (Sandbox Code Playgroud)
您显然不能直接更新应用程序,但是如果您确定版本已过期,您可以向用户展示一个意图,将他们带到 Play 商店:
public static void updateApp(final Activity act) {
final String appPackageName = BuildConfig.APPLICATION_ID;
AlertDialog.Builder builder = new AlertDialog.Builder(act);
builder
.setTitle(act.getString(R.string.dialog_title_update_app))
.setMessage(act.getString(R.string.dialog_google_credentials_message))
.setNegativeButton(act.getString(R.string.dialog_default_cancel), null)
.setPositiveButton(act.getString(R.string.dialog_got_it), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try {
act.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (ActivityNotFoundException anfe) {
act.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName;)));
}
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
Run Code Online (Sandbox Code Playgroud)
我相信这是针对 API 21 编译的,因此可能会对 22 进行一些小的调整。
以编程方式从清单中获取版本号和版本代码,如下所示:
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
Run Code Online (Sandbox Code Playgroud)
或者
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
Run Code Online (Sandbox Code Playgroud)
通过共享偏好将它们存储在您的应用程序中。现在,每当用户打开应用程序时,请检查当前版本代码与前一个版本代码。如果它们匹配,则让用户使用该应用程序。但如果它们不匹配,则显示一个弹出窗口询问用户更新您的应用程序。
| 归档时间: |
|
| 查看次数: |
15850 次 |
| 最近记录: |