我正在尝试使用昨天刚刚发布的 Google 的 Review API(Play Core library 1.8.0)。请参阅https://developer.android.com/guide/playcore/in-app-review
我仔细地遵循了故障排除部分,我确保该应用程序是从内部测试轨道下载的,我的帐户没有对该应用程序的评论,该应用程序在该用户的库中等等。我什至尝试了一个全新的帐户,但每次 com.google.android.finsky.inappreviewdialog.InAppReviewActivity 仅显示立即消失。
我从我的活动的 onResume() 方法调用以下代码:
reviewManager = ReviewManagerFactory.create(AlarmClock.this);
Logger.logInfo("Rating: requestReviewFlow() ");
reviewManager.requestReviewFlow().addOnSuccessListener(new OnSuccessListener<ReviewInfo>() {
@Override
public void onSuccess(ReviewInfo result) {
Logger.logInfo("Rating: launchReviewFlow() ");
reviewManager.launchReviewFlow(AlarmClock.this, result).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
Logger.logInfo("Rating: launchReviewFlow() success ");
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
两个侦听器都返回成功。
这是日志输出:
2020-08-06 16:01:29.317 29618-29618/? I/MyApp: [06Aug 16:01:29.317, main]: Rating: requestReviewFlow()
2020-08-06 16:01:29.318 29618-29618/? I/PlayCore: UID: [10409] PID: [29618] ReviewService : requestInAppReview (com.mypackage)
2020-08-06 16:01:29.320 29618-29774/? I/PlayCore: UID: [10409] …Run Code Online (Sandbox Code Playgroud) 该文件上的话题时,要求复审规定:
在用户对您的应用或游戏有足够的体验以提供有用的反馈后,触发应用内审核流程。
不要过度提示用户进行评论。这种方法有助于最大限度地减少用户的挫败感并限制 API 使用(请参阅配额部分)。
但这是非常模糊的,我们是否可以经常触发它(例如在游戏中的每个级别之后),或者我们应该在应用程序中添加一些等待时间(例如每个级别之后但每月最少等待时间)?
iOS 上有一个类似的 API,据观察,弹出窗口显示“一年大约 3 次”。了解类似的粗略估计会有所帮助,这将有助于设计 API 的正确使用并消除不必要的用户挫败感。
使用以下代码片段实现了应用内更新功能:
private void showInAppUpdateDialog(boolean isMandatoryUpdate) {
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
|| appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
int appUpdateType = isMandatoryUpdate ? IMMEDIATE : AppUpdateType.FLEXIBLE;
int requestCode = isMandatoryUpdate ? REQUEST_APP_UPDATE_IMMEDIATE : REQUEST_APP_UPDATE_FLEXIBLE;
if (appUpdateInfo.isUpdateTypeAllowed(appUpdateType)) {
// start the app update
try {
appUpdateManager.startUpdateFlowForResult(appUpdateInfo, appUpdateType, targetActivity, requestCode);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
}
}).addOnFailureListener(e -> {
e.printStackTrace();
});
}
Run Code Online (Sandbox Code Playgroud)
我正在安装 Android 9 的设备上测试应用程序内更新。 尽管如此,它仍然给我以下错误(ERROR_API_NOT_AVAILABLE):
com.google.android.play.core.install.InstallException: Install Error(-3): The API is not available …Run Code Online (Sandbox Code Playgroud) 最近,谷歌在Google I / O 2019中引入了``应用内更新''。
所以我正在尝试使用它。
val appUpdateManager = AppUpdateManagerFactory.create(this)
val appUpdateInfo = appUpdateManager.appUpdateInfo
appUpdateInfo.addOnCompleteListener {
val result = it.result
if (result.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& result.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
info("should show update")
appUpdateManager.startUpdateFlowForResult(
result,
AppUpdateType.FLEXIBLE,
this,
1)
} else {
info("This is already latest version: ${result.updateAvailability()}")
}
}
Run Code Online (Sandbox Code Playgroud)
但result.updateAvailability()总是如此UpdateAvailability.UPDATE_NOT_AVAILABLE。
为此,我制作了一个带有先前版本代码的签名发行版APK。但这是行不通的。
他正在用模拟器来做。看起来像调试模式。
我该怎么做?
Playstore控制台中是否有任何选项可配置此值?
这是官方文件。码:
// Creates instance of the manager.
AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);
// Returns an intent object that you use to check for an update.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
// For a flexible update, use AppUpdateType.FLEXIBLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
// Request the update.
}
});
Run Code Online (Sandbox Code Playgroud)
我们如何知道:
appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
Run Code Online (Sandbox Code Playgroud)
在哪里配置以上类型?官方文档中没有相关描述。
在AppUpdateInfo.class中:
public final boolean isUpdateTypeAllowed(int var1) {
if (var1 == 0) {
return …Run Code Online (Sandbox Code Playgroud) 面临即时应用程序更新模式的问题。成功完成应用程序更新后,一切都会关闭,并且不会重新启动应用程序。这就是问题所在。但android文档说:
全屏用户体验,要求用户更新并重新启动应用程序才能继续使用该应用程序。此用户体验最适合更新对于继续使用应用程序至关重要的情况。用户接受立即更新后,Google Play 会处理更新安装和应用重新启动。
implementation 'com.google.android.play:core:1.9.1'
implementation 'com.google.android.play:core-ktx:1.8.1'
Run Code Online (Sandbox Code Playgroud)
代码
class MainActivity : AppCompatActivity() {
companion object {
const val UPDATE_REQUEST_CODE = 112
const val TAG = "MainActivity"
}
private var appUpdateManager: AppUpdateManager? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<TextView>(R.id.tv_text).text = "Version " + BuildConfig.VERSION_NAME
// Returns an intent object that you use to check for an update.
appUpdateManager = AppUpdateManagerFactory.create(this)
}
private val listener: InstallStateUpdatedListener =
InstallStateUpdatedListener { installState ->
if (installState.installStatus() == InstallStatus.DOWNLOADED) {
// After …Run Code Online (Sandbox Code Playgroud) 我最近启用了 Google Play Console 的 Integrity API,但我不打算使用它,有办法禁用它吗?
在“设置”>“应用程序完整性”>“完整性 API”上似乎没有禁用它的选项 我尝试联系 Play 支持,但几个月来我还没有收到回复。
google-play google-play-services google-play-developer-api google-play-console google-play-core
一些背景信息:ResourceNotFoundException当我们迁移到Android应用程序捆绑包发布方法时,我们大多数人都可能遇到过。显然,问题出在侧面加载应用程序。参考这里。
Google最近宣布了针对此问题的解决方案。使用播放核心库,我们可以确定该应用是否为侧面加载(标识丢失的拆分apk)。如果应用程序是侧面加载的,则会显示“ 安装失败 ”弹出窗口,并重定向到Play商店,用户可以在其中通过Google Play商店正确安装该应用程序。
问题:一切正常,直到从Play商店安装缺少的拆分APK。现在,当我重新启动该应用程序时,它立即崩溃并显示错误消息。
默认FirebaseApp未在此过程中初始化
注意:直接从Play商店下载应用程序可以正常运行,而不会导致崩溃。仅当由于侧面加载问题而重新下载应用程序时,才会发生崩溃。
代码:
项目的build.gradle:
buildscript {
dependencies {
classpath 'com.android.tools.build:bundletool:0.9.0'
}
}
Run Code Online (Sandbox Code Playgroud)
应用模块的build.gradle:
implementation 'com.google.android.play:core:1.6.1'
Run Code Online (Sandbox Code Playgroud)
扩展应用程序的类:
public void onCreate() {
if (MissingSplitsManagerFactory.create(this).disableAppIfMissingRequiredSplits()) {
// Skip app initialization.
return;
}
super.onCreate();
.....
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都将非常棒。
crash android sideloading android-app-bundle google-play-core
我使用此链接集成了 Google Play 核心库的应用内更新功能。
我正在使用立即更新选项,因为我们会定期修复对更新很重要的各种关键错误。
以下是应用程序未崩溃并成功更新应用程序以及崩溃时的情况。
致命异常:java.lang.RuntimeException java.lang.reflect.InvocationTargetException com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:586) com.android.internal.os.ZygoteInit.main (ZygoteInit.java) :942) 由 java.lang.reflect.InvocationTargetException 引起 java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942) 由 android.content 引起。 IntentSender$SendIntentException android.app.Activity.startIntentSenderForResultInner (Activity.java:5019) com.google.android.play.core.appupdate.b.startUpdateFlowForResult (Unknown Source:5) co.behtarinternal.app.menu.MenuActivity$checkForAppUpdate$1 .onSuccess (MenuActivity.kt:239) co.behtarinternal.app.menu.MenuActivity$checkForAppUpdate$1.onSuccess (MenuActivity.kt:43) com.google.android.play.core.tasks.e.run (未知来源:27) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:942)
我到处搜索了很多,但没有找到与这个问题相关的任何可行的解决方案。
如果你们中的任何人遇到过类似的问题,并且您的解决方案有效,请帮助我。
我已经在Android中关注应用内更新API已有相当一段时间了,但找不到以下行的相关性:
appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
Run Code Online (Sandbox Code Playgroud)
-
appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)
Run Code Online (Sandbox Code Playgroud)
此isUpdateTypeAllowed()方法已在以下Android文档的代码段中使用:https : //developer.android.com/guide/app-bundle/in-app-updates#update_readiness。此外,以上两个方法调用在所有情况下均返回true,而我无法找到上述两个方法调用中的任何一个返回false的情况。