前提・実現したいこと
Androidアプリを更新した際、旧いアプリのユーザーに更新を促すため、Google Playのアプリ情報を取得したいです。
また、Google Play反映までのラグも考慮し、実際にアップデート可能になってからユーザーへアクションを起こしたいです。
(アクション自体は、アプリ起動時にダイアログを表示するといったシンプルなものを考えています)
該当のソースコード・試したこと
現在、クックパッドの記事を参考にPublishing APIを用いてVersionCodeを取得する事はできました。そのコードを以下に示します。
Java
1 @Nullable 2 private String getAccessToken() throws IOException { 3 Activity activity = mActivity.get(); 4 if (activity == null) { 5 return null; 6 } 7 InputStream jsonKeyFile = activity.getResources().openRawResource(R.raw.service_account); 8 GoogleCredential credential; 9 credential = GoogleCredential.fromStream(jsonKeyFile) 10 .createScoped(AndroidPublisherScopes.all()); 11 Logger.d(TAG, "service account id = " + credential.getServiceAccountId()); 12 Logger.d(TAG, "service account private key id = " + credential.getServiceAccountPrivateKeyId()); 13 Logger.d(TAG, "service account scopes = " + credential.getServiceAccountScopesAsString()); 14 15 // アクセストークンの取得 16 credential.refreshToken(); 17 18 String token = credential.getAccessToken(); 19 Logger.d(TAG, "access token: " + token); 20 return token; 21 } 22 23 @Nullable 24 private Integer getRemoteAppVersion(Activity activity, String accessToken) throws IOException { 25 if (activity == null || accessToken == null) { 26 return null; 27 } 28 final String packageName = activity.getPackageName(); 29 GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); 30 NetHttpTransport netHttpTransport; 31 try { 32 netHttpTransport = GoogleNetHttpTransport.newTrustedTransport(); 33 } catch (GeneralSecurityException e) { 34 netHttpTransport = new NetHttpTransport(); 35 } 36 AndroidPublisher androidPublisher = new AndroidPublisher.Builder(netHttpTransport, 37 JacksonFactory.getDefaultInstance(), credential) 38 .setApplicationName(packageName) 39 .setSuppressAllChecks(true) 40 .build(); 41 AndroidPublisher.Edits edits = androidPublisher.edits(); 42 AppEdit appEdit = edits.insert(packageName, null).execute(); 43 List<Apk> apks = edits.apks().list(packageName, appEdit.getId()) 44 .execute().getApks(); 45 Logger.d(TAG, new Gson().toJson(apks)); 46 int versionCode = apks.get(0).getVersionCode(); 47 for (Apk apk : apks) { 48 if (versionCode < apk.getVersionCode()) { 49 versionCode = apk.getVersionCode(); 50 } 51 } 52 return versionCode; 53 }
ただ、これで取得できるversionCodeはどうやらGoogle Playでリリース操作を完了した瞬間から反映されるらしく、取得されたバージョンは更新されているがAndroid端末からGoogle Playへアクセスするとまだアプリが更新されていない、という状態になってしまいます。
これについて、実際にGoogle Playでの反映を待ってから新たな値やフラグを返す、またはアプリ更新日時を取得できれば、と考えているのですが、その方法が分からないため、ご教授いただければと思います。
補足情報(FW/ツールのバージョンなど)
Android Studio 3.3.2
テスト端末→Android実機 Android8.0.0 ASUS_X00RD
あなたの回答
tips
プレビュー