如何解决Xamarin和Firebase中的“不存在com.google.firebase.messaging软件包”错误

时间:2019-01-31 01:03:57

标签: firebase xamarin.forms xamarin.android

我正在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上弄清楚这个错误。

1 个答案:

答案 0 :(得分:0)

第一:您发布的库实在是过时的(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;
}

在某些Android设备中未安装Google Play服务,因此我们需要确保用户知道是否可以接收推送通知。

要记住,如果你正在使用Android模拟器,安装谷歌播放服务就可以了。