如何将 Firebase 消息传递到 Xamarin.Android 应用程序?
Posted
技术标签:
【中文标题】如何将 Firebase 消息传递到 Xamarin.Android 应用程序?【英文标题】:How to implement Firebase Messaging to Xamarin.Android application? 【发布时间】:2018-12-12 13:34:23 【问题描述】:我正在使用 Xamarin.android 制作我的 Android 应用程序。 我想实现推送通知,我正在尝试按照本指南使用 Firebase:https://docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/remote-notifications-with-fcm?tabs=windows 然而,本指南和其他关于同一主题的指南似乎已经过时。当我在 Firebase 控制台中创建一个新项目并单击添加到 android 应用程序时,我会看到 Android Studio、Unity 和 Web 应用程序的说明。没有针对 Xamarin 的说明。当我尝试遵循 Android Studio 的说明时,我可以获得 google-services.json 文件,但我无法遵循第 3 部分和第 4 部分(添加 android SDK 和测试连接性),因为它们用于 gradle 开发。 如何在 Xamarin.Android 应用程序中使用 Firebase 云消息传递,或者是否有任何其他方式可以为我的应用程序添加推送通知?
更新:
我从 Firebase 控制台 -> 设置下载了新的 google-services.json 文件到我的项目,清理了解决方案,重建它并从设备中删除了应用程序。当我在设备上测试应用程序并单击日志令牌按钮时,日志输出中的令牌为空,之后它给了我: D/FirebaseInstanceId(14477):后台同步失败:超时,10 秒后重试。 所以现在我无法获得令牌,或者我无法刷新它。
我检查了以下内容:
我的项目的包名称与 Firebase 应用上的包名称匹配 google-services.json 构建操作设置为 GoogleServicesJson Google Play 服务在我的设备上可用(Samsung SM-A500F Android 6.0 API 23),我也在其他设备上测试过,但仍然无法正常工作我处理这个问题很久了,如果您需要任何其他信息,请询问我。
【问题讨论】:
【参考方案1】:您需要从 Firebase 控制台获取 google-services.json 文件。完成后,忽略从 Firebase 控制台链接的说明,并使用您链接的 Microsoft 说明文档,例如:https://docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/remote-notifications-with-fcm?tabs=windows
在 firebase 控制台中,请确保 firebase 控制台中的包名称与您的应用的包名称匹配。
【讨论】:
感谢您的回答。我从 Firebase Console -> Settings 下载了新的 google-services.json 文件到我的项目,清理了解决方案,重建它并从设备中删除了应用程序。当我在设备上测试应用程序并单击日志令牌按钮时,日志输出中的令牌是 emply,之后它给了我:D/FirebaseInstanceId(14477):后台同步失败:超时,10 秒后重试。所以我无法获得令牌 这可能需要更深入的调查。你可以打开一个免费的 Xamarin 电子邮件支持案例,与 Xamarin 支持工程师一对一地工作。您可以在此处打开免费的 Xamarin 支持案例:support.microsoft.com/en-us/…【参考方案2】:我按照您提到的 Microsoft 示例进行操作,但遇到了同样的问题。 在另一个例子中搜索,我发现代码中缺少一个类,所以就这样吧。
只需确保它位于 Android 项目根目录中的 MyFirebaseIIDService 类旁边。这解决了我的问题。
[Service]
[IntentFilter(new[] "com.google.firebase.MESSAGING_EVENT" )]
public class MyFirebaseMessagingService : FirebaseMessagingService
const string TAG = "MyFirebaseMsgService";
public override void OnMessageReceived(RemoteMessage message)
Log.Debug(TAG, "From: " + message.From);
var body = message.GetNotification().Body;
var title = message.GetNotification().Title;
Log.Debug(TAG, "Notification Message Body: " + body);
SendNotification(body, title, message.Data);
void SendNotification(string messageBody, string Title, IDictionary<string, string> data)
var intent = new Intent(this, typeof(MainActivity));
intent.AddFlags(ActivityFlags.ClearTop);
foreach (var key in data.Keys)
intent.PutExtra(key, data[key]);
var pendingIntent = PendingIntent.GetActivity(this, MainActivity.NOTIFICATION_ID, intent, PendingIntentFlags.OneShot);
var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
.SetSmallIcon(Resource.Drawable.ic_stat_ic_notification)
.SetContentTitle(Title)
.SetContentText(messageBody)
.SetAutoCancel(true)
.SetContentIntent(pendingIntent);
var notificationManager = NotificationManagerCompat.From(this);
notificationManager.Notify(MainActivity.NOTIFICATION_ID, notificationBuilder.Build());
【讨论】:
嗯.. 所有代码都在此处的链接文档中:docs.microsoft.com/en-us/xamarin/android/data-cloud/…以上是关于如何将 Firebase 消息传递到 Xamarin.Android 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 FireBase 云消息传递令牌存储在 Android 的 firebase 数据库中?