現在、起動時にアプリのバージョンコードをチェックして、サーバーの最新バージョンのコードと照合しています。この照合に基づいて、Androidマーケットから最新のアップデートを取得するようユーザーに送信しています。
うまく機能していますが、私の問題は、サーバーの最新バージョンのコードを手動で変更する必要があり、APK
の新しいバージョンが市場でいつアクティブになるか正確にわかりません。
Androidマーケットでアプリのバージョンコードを直接チェックして、新しいAPKがアクティブになったときにユーザーを直接マーケットに送ることができるようにする方法はありますか?
Google Playは、メタデータを取得するための公式APIを提供していません。ただし、非公式APIは http://code.google.com/p/Android-market-api/ で確認できます。
具体的には、Wikiページ HowToSearchApps をご覧ください。クエリへの応答には、バージョン情報が含まれています。
{
"app": [
{
"rating": "4.642857142857143",
"title": "Ruboto IRB",
"ratingsCount": 14,
"creator": "Jan Berkel",
"appType": "APPLICATION",
"id": "9089465703133677000",
"packageName": "org.jruby.ruboto.irb",
"version": "0.1",
"versionCode": 1,
"creatorId": "\"Jan Berkel\"",
"ExtendedInfo": {
"category": "Tools",
"permissionId": [
...
PlayStoreからアプリのバージョンを取得するためのパターンマッチングを実行できます。
Googleプレイストアの最新パターン、つまり<div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">X.X.X</span></div>
最初に上記のノードシーケンスを照合し、次に上記のシーケンスからバージョン値を取得する必要があります。以下は、同じコードスニペットです。
private String getAppVersion(String patternString, String inputString) {
try{
//Create a pattern
Pattern pattern = Pattern.compile(patternString);
if (null == pattern) {
return null;
}
//Match the pattern string in provided string
Matcher matcher = pattern.matcher(inputString);
if (null != matcher && matcher.find()) {
return matcher.group(1);
}
}catch (PatternSyntaxException ex) {
ex.printStackTrace();
}
return null;
}
private String getPlayStoreAppVersion(String appUrlString) {
final String currentVersion_PatternSeq = "<div[^>]*?>Current\\sVersion</div><span[^>]*?>(.*?)><div[^>]*?>(.*?)><span[^>]*?>(.*?)</span>";
final String appVersion_PatternSeq = "htlgb\">([^<]*)</s";
String playStoreAppVersion = null;
BufferedReader inReader = null;
URLConnection uc = null;
StringBuilder urlData = new StringBuilder();
final URL url = new URL(appUrlString);
uc = url.openConnection();
if(uc == null) {
return null;
}
uc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
inReader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
if (null != inReader) {
String str = "";
while ((str = inReader.readLine()) != null) {
urlData.append(str);
}
}
// Get the current version pattern sequence
String versionString = getAppVersion (currentVersion_PatternSeq, urlData.toString());
if(null == versionString){
return null;
}else{
// get version from "htlgb">X.X.X</span>
playStoreAppVersion = getAppVersion (appVersion_PatternSeq, versionString);
}
return playStoreAppVersion;
}
これで解決しました。お役に立てば幸いです。