【问题标题】:How to fix 'package com.google.firebase.messaging does not exist' error in Xamarin and Firebase如何修复 Xamarin 和 Firebase 中的“com.google.firebase.messaging 包不存在”错误
【发布时间】:2019-01-31 01:03:57
【问题描述】:

我正在 Xamarin.Forms 上开发一个应用程序。我正在使用以下插件从 Firebase 获取推送通知。我正在使用 MacBook。

FirebasePushNotificationPlugin

https://github.com/CrossGeeks/FirebasePushNotificationPlugin

我试过了;

这还没有解决办法。我也一样。

https://github.com/CrossGeeks/FirebasePushNotificationPlugin/issues/153

iOS 没有问题,但我在 Android 上收到错误。

Error: com.google.firebase.messaging package com.google.firebase.messaging.FirebaseMessagingService

第二个错误;

/Users/Username/Projects/MyProject/MyProject.Android/obj/Debug/android/src/md5f94c48bc84b2956c5a5be24cbc1fa7f2/PNFirebaseMessagingService.java(7,7): Error: error: cannot find symbol if (getClass () == PNFirebaseMessagingService.class) symbol: method getClass() location: class PNFirebaseMessagingService (MyProject.Android)

我的 Nuget 包是最新的。我无法在 Android 端找出这个错误,谢谢。

【问题讨论】:

标签: firebase xamarin.forms xamarin.android


【解决方案1】:

第一:您发布的库确实已经过时(2 年以上)。你应该使用Xamarin.Firebase.Messaging

第二:不要忘记在Android文件夹中添加google-services.json文件,在iOS文件夹中添加GoogleService-Info.plist,并将Build Action设置为GoogleServiceJson .

第三:你必须有办法检测手机是否启用了Google Play服务

所以你必须在 AndroidManifest 中添加这个:

<application android:label="YourAppName">
<receiver
    android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
    android:exported="false" />
<receiver
    android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
    android:exported="true"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="${applicationId}" />
    </intent-filter>
</receiver>
</application>

然后创建一个服务:

namespace YourAppName.Droid
{
    [Service]
    [IntentFilter(new [] { "com.google.firebase.INSTANCE_ID_EVENT" })]
    public class FirebaseService : FirebaseInstanceIdService
    {
        const string TAG = "MyFirebaseIIDService";

        public override void OnTokenRefresh()
        {
            var refreshedToken = FirebaseInstanceId.Instance.Token;
            Log.Debug(TAG, "Refreshed token: " + refreshedToken);
            SendRegistrationToServer(refreshedToken);
        }

        void SendRegistrationToServer(string token)
        {
            // Add custom implementation, as needed.
        }
    }
}

最后,将此方法添加到您的 MainActivity 并在 OnCreate 方法中调用它:

public bool CheckForGoogleServices()
        {
            int resultCode = GoogleApiAvailability.Instance.IsGooglePlayServicesAvailable(this);
            if (resultCode != ConnectionResult.Success)
            {
                if (GoogleApiAvailability.Instance.IsUserResolvableError(resultCode))
                {
                    Toast.MakeText(this, GoogleApiAvailability.Instance.GetErrorString(resultCode), ToastLength.Long);
                }
                else
                {
                    Toast.MakeText(this, "This device does not support Google Play Services", ToastLength.Long);
                }
                return false;
            }
            return true;
}

在某些安卓设备中没有安装 Google Play Services,所以我们需要确保用户知道是否可以收到推送通知。

请记住,如果您使用的是 android 模拟器,请在其上安装 Google Play Service。

【讨论】:

  • 你所说的一切都已经完成了。在同一个库的 ios 中没有问题,只是在 Android 端出现此错误。
猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
相关资源
最近更新 更多