Google 开发者控制台中的“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”警告是啥?

Posted

技术标签:

【中文标题】Google 开发者控制台中的“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”警告是啥?【英文标题】:What is "We’ve detected that your app is using an old version of the Google Play developer API" warning in Google Developer Console?Google 开发者控制台中的“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”警告是什么? 【发布时间】:2019-11-04 02:55:01 【问题描述】:

我们没有明确使用任何 Google Play 开发者 API,但我们收到以下警告:

这和https://developer.android.com/google/play/billing/billing_library_releases_notes有关吗?

我们目前正在使用 Google Play 结算库 1.2.2 版 (2019-03-07)

我们不打算迁移 Google Play 结算库 2.0.1 版本(2019-06-06),因为这将是大量工作而收效甚微。

必须在三天内确认购买

但这只是我的猜测 - Google Play 结算库与 Google Play Developer API 相关。它们可能相互关联,也可能不相互关联。

“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”是什么意思?

以下是我们的全部依赖项。知道是什么导致了这个警告吗?

dependencies 
    implementation fileTree(dir: 'libs', include: ['*.jar'])


    implementation 'com.android.billingclient:billing:1.2.2'


    implementation 'androidx.multidex:multidex:2.0.1'


    def lifecycle_version = '2.0.0-beta01'
    // ViewModel and LiveData
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"


    // alternately - if using Java8, use the following instead of compiler
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"


    def room_version = '2.1.0'
    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    def work_version = "2.1.0"
    implementation "androidx.work:work-runtime:$work_version"

    // https://github.com/yccheok/SmoothProgressBar
    implementation 'com.github.castorflex.smoothprogressbar:library:1.1.0'

    // For Google Drive REST API - https://github.com/gsuitedevs/android-samples/blob/master/drive/deprecation/app/build.gradle
    implementation('com.google.http-client:google-http-client-gson:1.26.0') 
        exclude group: 'org.apache.httpcomponents'
    
    implementation('com.google.api-client:google-api-client-android:1.26.0') 
        exclude group: 'org.apache.httpcomponents'
    
    implementation('com.google.apis:google-api-services-drive:v3-rev136-1.25.0') 
        exclude group: 'org.apache.httpcomponents'
    

    implementation 'com.google.firebase:firebase-messaging:19.0.1'

    implementation 'com.google.android.gms:play-services-auth:17.0.0'

    implementation 'androidx.appcompat:appcompat:1.1.0-beta01'
    implementation 'androidx.preference:preference:1.1.0-beta01'
    implementation 'com.google.android.material:material:1.1.0-alpha07'

    implementation 'androidx.exifinterface:exifinterface:1.0.0'
    implementation 'androidx.gridlayout:gridlayout:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.code.gson:gson:2.8.5'

    implementation 'com.github.yccheok:AndroidDraw:0.18'
    implementation 'com.github.yccheok:SectionedRecyclerViewAdapter:0.4'
    implementation 'com.github.yccheok:CalendarView:1.10'

    implementation 'com.andrognito.patternlockview:patternlockview:1.0.0'

    implementation 'com.github.bumptech.glide:glide:4.7.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'

    implementation 'com.github.yccheok:PhotoView:0.1'

    implementation 'com.github.yccheok:Matisse:1.6'

    implementation 'com.jakewharton.threetenabp:threetenabp:1.1.1'

    // https://github.com/romandanylyk/PageIndicatorView
    implementation 'com.romandanylyk:pageindicatorview:1.0.2@aar'

    implementation 'me.zhanghai.android.materialratingbar:library:1.3.2'

    testImplementation 'junit:junit:4.12'

    testImplementation "org.robolectric:robolectric:4.2.1"
    testImplementation 'org.mockito:mockito-core:2.23.0'
    testImplementation 'org.powermock:powermock-core:2.0.0-RC.4'
    testImplementation 'org.powermock:powermock-module-junit4:2.0.0-RC.4'
    testImplementation 'org.powermock:powermock-api-mockito2:2.0.0-RC.4'

    androidTestImplementation 'androidx.test:runner:1.3.0-alpha01'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-alpha01'

对于项目级别的依赖,是

dependencies 
    classpath 'com.android.tools.build:gradle:3.4.2'
    classpath 'com.google.gms:google-services:4.2.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files

【问题讨论】:

Google Play Billing library might be related to Google Play Developer API我觉得你是对的 您在后端使用哪个库来验证购买? 看起来您的 Google Drive 相关库正在使用已弃用的 API。访问此页面:github.com/gsuitedevs/android-samples/tree/master/drive/… @JeelVankhede com.google.apis:google-api-services-drive:v3-rev136-1.25.0他已经在使用v3 Drive API,并且特别提到了错误Developer API 【参考方案1】:

任何人都知道,“我们检测到您的应用 正在使用旧版本的 Google Play 开发者 API”?

此消息的简单解释是:您的应用程序或第三方应用程序正在访问below api

https://www.googleapis.com/androidpublisher/v1/applications

https://www.googleapis.com/androidpublisher/v2/applications

传递您的应用程序包名称

com.android.myapp

在其他方面执行自动化任务,例如

Retrieve billing Info
Publish app to store
Retrieve review comments
etc..

尽管如此,这些 api 已被弃用,它们应该通过下面的 api 来代替

https://www.googleapis.com/androidpublisher/v3/applications

已确认某些第三方插件会触发此消息,仅仅是因为它们使用已弃用的 API 来执行其操作。

例如:

Fastlane for android --见discussion Visual Studio IDE 带有 Xamarin.Forms 的 android 应用程序的分发渠道 -- 请参阅 discussion Jamesmontemagno Billing Library 用于 Xamarin 和 Windows——请参阅 discussion

您也有可能是从您的服务器端或您自己的应用程序代码中引用已弃用的 api 的人或“just maybe”。底线是a call somewhere is hitting a deprecated api 与您的应用程序的package name。我给你的建议是:Update your billing library if you use one.

用Google Developer API v3 doc 的声明来总结一下

API 的使用也可以是间接的,不是由应用程序本身,而是由一个 第三方插件(例如用于推出新版本的插件)。许多 第三方插件已经在使用 API 版本 3。如果你使用 不支持版本 3 的插件,您需要联系 维护者。

【讨论】:

我和 OP 有同样的问题,我只使用谷歌支持库作为依赖项(没有别的,没有第 3 方库或罐子)。此外,我不使用任何 API 或 API 密钥,没有远程服务器通信,没有应用内支付,而且我的应用离线工作,因此无法访问互联网。我仍然收到警告,为什么?我觉得不可能,一定是误报 我可以验证它根本不是我的应用内计费插件库。这通常是由于收据验证服务器或其他使用旧 API 的扩展。 我保证我的应用程序或任何其他使用我的应用程序名称的应用程序都不会访问此 API。所以这个答案不仅suggest不是一个解决方案(意味着它不应该是一个答案),它甚至都不正确。【参考方案2】:

问题是您的项目在 Google Cloud Platform 上使用的是旧版本的 Developer Web API。当您有意/无意地从 Google Play 控制台的开发者设置中的 API 访问 部分启用开发者服务时,它会自动为您设置。

用于订阅和购买的 Web API 实际上是 Android Developer API 的一部分:

Google Play Developer API 允许您执行许多发布和应用管理任务。它包括两个组件:

订阅和应用内购买 API 可让您管理应用内购买和订阅。 Publishing API 可让您上传和发布应用,以及执行其他与发布相关的任务。

您在您的应用中没有使用上述 API,此 API 用于管理而非实际购买。您正在使用具有不同版本的 SDK,因此无需升级。不过,此 API 是在您的 GCP 项目中设置的。

要查找 GCP 上的哪个项目与您的 Play 管理中心相关联,请访问以下链接: https://play.google.com/apps/publish/#ApiAccessPlace

您只需要转到 GCP,找到您的项目,找到 Google Android Developer API 并在那里更改版本。或者,如果您不使用 API,您可以禁用它。

例如,我的 GCP 项目被自动命名为 Google Play Android Developer,因此您的可能与您的项目相同。

我在控制台上看不到一个选项,可能是因为他们为新项目删除了它,但如果您的项目已经在使用旧版本,您可能也会在那里收到警告。

【讨论】:

你能解释一下找到A​​PI后如何更改版本吗? @MaximeTremblay-Savard 如果没有迁移选项,然后从Play商店取消链接,删除谷歌云上的项目并再次将其链接到新项目。 取消链接项目时会发生什么?为什么这个项目首先存在? @Manuel 如果您取消链接项目,您将无法使用这两个 API,如果您还没有使用它们,它不会有任何区别。基本上,您必须创建一个 GCP 项目,然后将其链接到您的控制台项目以使用这两个 API 谢谢 我一开始想知道为什么这个项目存在,但我发现它是fastlane集成。【参考方案3】:

这与计费无关,因为您没有服务器端验证。就像其他人提到的那样,它是AndroidPublisher API,这意味着您可能有一个非常讨厌的安全漏洞。那么,如何去寻找呢?

    转到https://play.google.com/apps/publish/#AdminPlace 在那里,您会看到“具有访问权限的用户”列表。有些是真实的,有些是服务帐户。后者以@gcp-project-id.iam.gserviceaccount.com结尾 如果有任何您不认识的内容,请删除该帐户 如果您想进一步清理,请使用上方的 gcp-project-id 转到 https://console.developers.google.com/apis/credentials?project=gcp-project-id
      不要在此处删除随机服务帐户,大多数是从其他各种 Google 服务自动生成的,如果它们消失,事情就会中断。 移除有权访问 Play 管理中心的服务帐号(如果它们不用于访问其他 API)。

【讨论】:

我没有“有权访问的用户”部分。我需要做什么吗?【参考方案4】:

Google Play Developer API 不直接在您的应用 (APK) 中使用,因此您无法在 build.gradle 中修复它。它包含一些帮助您自动化应用发布(持续集成,CI)的服务,以及一个用于验证应用内购买的 API。

您应该检查您的后端如何验证应用内购买并更新到最新版本。您还可以检查您的 CI 服务器如何将 APK 上传到 Play 商店并更新到最新版本。

您可以在这里https://developers.google.com/android-publisher/阅读更多关于 Google Play 开发者 API 的信息

【讨论】:

我们确实有任何后端来验证应用内购买。我们也没有任何 CI 服务器。【参考方案5】:

根据 google 文档,您不能像文档中那样使用 Google Play 开发者版本 1 和 2,他们提到他们正在迁移到版本 3,并且 应用内计费 与此直接相关。 检查第一个链接以阅读它 1。 https://android-developers.googleblog.com/2019/03/changes-to-google-play-developer-api.html

了解 Google Play 开发者 API 查看https://developers.google.com/android-publisher/

用于实施版本 3 1。 https://github.com/googlesamples/android-play-publisher-api/tree/master/v3/java 2。 https://developers.google.com/api-client-library/java/apis/androidpublisher/v3

希望这会对你有所帮助。

【讨论】:

嗯,是的,OP 似乎知道这一点,并声称不直接使用 SDK。问题是:您如何找出导致此通知的原因 没有简单的方法可以找到导致它的原因,博客明确表示警告也可能存在,因为“API 的使用也可以是间接的,不是应用程序本身,而是三分之一-派对插件”。显然,OP 正在使用很多库。 “该消息基于过去 7 天内对 API 的所有调用,并且每天刷新”。

以上是关于Google 开发者控制台中的“我们检测到您的应用正在使用旧版本的 Google Play 开发者 API”警告是啥?的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Google Play 上架报错 ( 我们检测到您的应用程序包含未经认证的广告SDK或未经批准用于儿童导向服务的SDK )

Flutter:我们检测到您的应用在您的 1 个或多个 app bundle 或 APK 的清单文件中包含 requestLegacyExternalStorage 标志

Google Play 通知 - 外部存储权限 - 2021 年 5 月 5 日之前

如何在 Google Playstore 上修复“违反家庭政策要求”

Google VR 启动中 Google Play 开发者控制台中的“发布前报告”失败

新的 Google Play 开发者控制台界面中的“取消发布应用”按钮在哪里?