当前位置: 首页 > 知识库问答 >
问题:

次要应用程序的FireBaseMessaging.getInstance(firebaseApp)应该是公共的,但它是私有的?

禄源
2023-03-14

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)
implementation "com.google.firebase:firebase-messaging:20.2.0"

但是,当我试图用重载的GetInstance实例化FirebaseMessaging时,我得到一个错误,说明它是不可访问的。当我查看包源代码时,反编译显示重载的构造函数不像无参数的GetInstance那样是公共的:

java prettyprint-override">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);
    }

我是不是漏掉了什么?

共有1个答案

澹台星光
2023-03-14

我已经验证了一种方法来做到这一点,因为我一直面临着类似的问题。

我使用google-services.json文件注册了其中一个项目。

现在,根据文档:

对于第二个项目,我使用以下文档中的代码手动配置了该项目:

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到手动代码映射

    null
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()
}
 类似资料:
  • 在下面的代码片段中,变量服务和查询是私有的。 保持它们私有有什么用? 有什么帮助? 注意:我已经阅读了多个与堆栈溢出相关的问题和答案,但找不到任何有效的答案。

  • 当main方法在类QNA中时程序运行良好,但在类中定义时给出错误测试错误:在类QNA中找不到main方法,请将main方法定义为:public static void main(String[]args)或JavaFX应用程序类必须扩展JavaFX.application.application

  • 问题内容: 假设我有一个要实例化的类。我在类中有几个私有的“帮助器”方法,它们不需要访问任何类成员,而仅对它们的参数进行操作,并返回结果。 有没有指定任何特别的原因,并为静态方法-或任何特别的理由不? 将它们设置为非静态无疑是最容易的,即使它们可以肯定是静态的而不会引起任何问题。 问题答案: 我更喜欢这样的帮助方法; 这将使读者清楚地知道他们不会修改对象的状态。我的IDE还将以斜体显​​示对静态方

  • 哈希函数是非常有用和多功能的。通常,它们用于将一个空间映射到一个小得多的空间。当然,这意味着两个对象可能哈希到相同的值(碰撞),但这是因为您正在减少空间(鸽子原则)。函数的效率很大程度上取决于散列空间的大小。 我不是问我们为什么要用素数。很明显,如果我们用乘法,我们应该用素数。然而,乘以任何数,即使是素数,也应该比异或次优。这就是为什么所有其他非加密散列函数--以及大多数加密函数--使用异或而不是

  • 我有多个线程使用ElasticSearchClient,如下所述 据我所知,Singleton类是线程安全的,但我不确定如果多个线程开始执行Singleton类的同一方法会发生什么。这有副作用吗? 注意:我知道上面的singleton类不是反射和序列化安全的。

  • 仅在MSVC中。Clang和GCC输出(这很可能是正确的)。 有趣的是:如果取消copy-ctor注释,它将输出,这是正确的(析构函数调用了两次)。 是MSVC编译器中的bug吗?还是正确的行为?