gpt4 book ai didi

android - 辅助应用程序的 FirebaseMessaging.getInstance(firebaseApp) 应该是公共(public)的,但它是私有(private)的?

转载 作者:行者123 更新时间:2023-12-02 13:42:21 25 4
gpt4 key购买 nike

我正在尝试为辅助 Firebase 应用订阅 FCM(Firebase 云消息传递)主题,根据文档,这可以通过重载的 getInstance 来完成。它将辅助 FirebaseApp 实例作为参数:

https://firebase.google.com/docs/reference/admin/java/reference/com/google/firebase/messaging/FirebaseMessaging#public-static-synchronized-firebasemessaging-getinstance-firebaseapp-app

public static synchronized FirebaseMessaging getInstance (FirebaseApp app)

Gets the FirebaseMessaging instance for the specified FirebaseApp.



我正在使用 Kotlin,我在 build.gradle 中拉入包像这样:
implementation "com.google.firebase:firebase-messaging:20.2.0"

但是当我尝试实例化 FirebaseMessaging与重载 getInstance ,我收到一条错误消息,指出它不可访问。看包源码时,反编译显示重载的构造函数不像无参数的 getInstance那样是公开的:

public class FirebaseMessaging {
public static final String INSTANCE_ID_SCOPE = "FCM";
private final Context zzb;
private final FirebaseInstanceId zzc;
private final Task<zzab> zzd;
@Nullable
@SuppressLint({"FirebaseUnknownNullness"})
@VisibleForTesting
static TransportFactory zza;

@NonNull
public static synchronized FirebaseMessaging getInstance() {
return getInstance(FirebaseApp.getInstance());
}

@Keep
@NonNull
static synchronized FirebaseMessaging getInstance(@NonNull FirebaseApp var0) {
return (FirebaseMessaging)var0.get(FirebaseMessaging.class);
}

我错过了什么?

最佳答案

我已经验证了一种方法,因为我遇到了类似的问题。
我使用 google-services.json 注册了其中一个项目。文件。
现在根据 documentation :

public void onNewToken (String token)

Called when a new token for the default Firebase project is generated.


在这里,“默认”一词至关重要。它提到 onNewToken被覆盖的 FirebaseMessagingService 中的方法(例如:MyFirebaseMessagingService)只会为默认项目调用。
因此在这种情况下,第一个项目使用 google-services.json 配置。将是默认项目,为此 onNewToken方法将被调用。
对于第二个项目,我在 documentation 之后使用以下代码手动配置了项目。 :
val options = FirebaseOptions.Builder()
.setProjectId("my-firebase-project")
.setApplicationId("1:27992087142:android:ce3b6448250083d1")
.setApiKey("AIzaSyADUe90ULnQDuGShD9W23RDP0xmeDc6Mvw")
.build()
参数值可以从 google-services.json 获得。第二个项目的文件。
(注意:不要将第二个项目的 google-services.json 包含在项目中)
google-services.json到手动代码映射
  • projectId (setProjectId) : project_id键入 json 的根目录
  • applicationid (setApplicationId): client > client_info > mobilesdk_app_id .如果有多个项目,请确保使用的客户端是 package_name与 Android 应用程序
  • 匹配
  • apiKey (setApiKey) : client > api_key > current_key (这里也要确保包名。

  • 关键代码
    在文档中很难找到的最重要部分是获取第二个 firebase 项目的 token 。
    val app = Firebase.initialize(this, options, "ANY_FIXED_STRING_EXCEPT_DEFAULT")

    val firebaseMessaging = app.get(FirebaseMessaging::class.java) as FirebaseMessaging

    ymFirebaseMessaging.token.addOnCompleteListener{
    if (!it.isSuccessful) {
    Log.d(TAG, "Fetching FCM token failed", it.exception)

    return@addOnCompleteListener
    }


    val token = it.result
    Log.d(TAG, "YM: $token")
    Toast.makeText(
    activity,
    "$TAG: Got token",
    Toast.LENGTH_LONG
    ).show()
    }

    关于android - 辅助应用程序的 FirebaseMessaging.getInstance(firebaseApp) 应该是公共(public)的,但它是私有(private)的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62253691/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com