我正在Xamarin.Forms上开发应用程序。我正在使用以下插件从Firebase获取推送通知。我正在使用MacBook。
FirebasePushNotificationPlugin
https://github.com/CrossGeeks/FirebasePushNotificationPlugin
我尝试过
很多次清理和重建解决方案
很多时候删除bin和obj文件夹。
这没有解决方案。我也一样。
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上弄清楚这个错误。
答案 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模拟器,安装谷歌播放服务就可以了。