2

谷歌文档说:

开始侦听传入消息 接下来,调用 SMS 用户同意 API 的 startSmsUserConsent() 方法开始侦听传入消息。如果您知道发送 SMS 消息的电话号码,请指定它(否则,传递 null)。这样,SMS 用户同意 API 将仅触发来自该号码的消息。

但最后一次更新包括更改: 在以前使用 @RecentlyNonNull 和 @RecentlyNullable 的地方使用了严格的可空性注释(@NonNull 和 @Nullable)。通过此更改,曾经导致空值警告的问题现在在构建 Kotlin 代码或使用 Java 空值检查框架时会导致错误。类似的注释更改将在其他 com.google.android.gms 工件的未来版本中逐步推出。

现在我在使用 SmsRetriever 时崩溃了。因为我在startSmsUserConsent()

更新: 我使用:

implementation 'com.google.android.gms:play-services-auth:19.2.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.1'

我的代码:

private fun startSmsUserConsent() {
    SmsRetriever.getClient(requireContext()).also {
        it.startSmsUserConsent(null)
            .addOnSuccessListener { Timber.d("LISTENING_SUCCESS") }
            .addOnFailureListener { Timber.d("LISTENING_FAILURE") }
    }
}

如果我们进入 startSmsUserConsent 我们可以看到:

@RecentlyNonNull
public abstract Task<Void> startSmsUserConsent(@Nullable String var1);

当我将库更新到版本时:

implementation 'com.google.android.gms:play-services-auth:20.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:18.0.0'

现在,如果我们进入 startSmsUserConsent,我们将看到:

@NonNull
public abstract Task<Void> startSmsUserConsent(@Nullable String var1);

现在当 startSmsUserConsent 触发时,我会崩溃

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.***.***, PID: 5183
    java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, parameter it
        at org.***.***.ui.fragment.account.Account.startSmsUserConsent$lambda-2$lambda-0(Unknown Source:2)
        at org.***.***.ui.fragment.account.Account.$r8$lambda$IQ631PjiyctiI5X-7HCb3IAxRs0(Unknown Source:0)
        at org.***.***.ui.fragment.account.Account$$ExternalSyntheticLambda6.onSuccess(Unknown Source:2)
        at com.google.android.gms.tasks.zzm.run(com.google.android.gms:play-services-tasks@@18.0.0:1)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/Process: Sending signal. PID: 5183 SIG: 9

我的构建:

minSdkVersion 19
targetSdkVersion 31
Test device api 30

更新: 另外,如果我更新

implementation "com.google.android.gms:play-services-maps:18.0.0"
implementation 'com.google.firebase:firebase-bom:29.0.1'

最高版本:

implementation "com.google.android.gms:play-services-maps:18.0.1"
implementation 'com.google.firebase:firebase-bom:29.0.2'

我遇到了同样的崩溃。可能问题出在“com.google.android.gms”中

4

1 回答 1

2

这个问题已经解决。

[发布说明谷歌服务]:https ://developers.google.com/android/guides/releases

2021 年 12 月 16 日 play-services-base 和 play-services-tasks 的最新更新解决了在 Kotlin 代码中处理 Task 结果时可能导致运行时 NPE (NullPointerException) 的问题。如果您使用 2021 年 12 月 9 日发布中列出的任何库版本,则可以通过显式依赖 play-services-base 和 play-services-tasks 的 v18.0.1 来避免运行时 NPE。将以下内容添加到 build.gradle 的依赖项部分:

implementation 'com.google.android.gms:play-services-base:18.0.1' implementation 'com.google.android.gms:play-services-tasks:18.0.1' 2022 年 1 月,我们计划发布新版本在 12 月 9 日发布的其他工件中,新的 POM 依赖于 18.0.1 版本的 play-services-base 和 play-services-tasks。

Firebase 的最新更新包括以下更改:

Firebase Android BoM(物料清单)Firebase SDK for Google Analytics 此 Firebase 版本采用最新版本的 play-services-base 和 play-services-tasks (v18.0.1) 以修复 2021 年 12 月 9 日版本中描述的问题.

有关详细信息,请参阅 Firebase Android SDK 发行说明。

于 2021-12-18T17:27:51.493 回答