几乎每一个应用程序的一个重要特性是支持推送通知的能力。使用推送通知,您可以更新用户,而不需要应用程序在任何时候运行或轮询服务器, 避免潜在的电池电量不足。 随着火力点云信息的介绍(FCM),谷歌使得在Android应用程序中实现推送通知变得容易了一点。FCM是谷歌云消息(GCM)的新版本和改进版本,您可以使用它将远程通知发送到客户机应用程序。对于将瞄准多个平台或需要利用先进的推操作(如分段推送)的应用程序,我们可以使用带有Azure通知集线器的FCM。

与GCM不同,FCM负责为您提供基本的消息传递管道。使用FCM,您不再需要编写代码来注册应用程序,也不必包含重试逻辑来更新订阅令牌。您可以通过以下操作向您的应用程序添加基本的FCM推送通知:

  1. 安装Xamarin.Android NuGets包和一个证书文件.
  2. 添加一对  定义到你的ndroidManifest.xml.
  3. 写几行代码把它们全部组合起来。

另外,不要编写发送通知的测试程序,你可以使用新的基于Web的火力点控制台发送通知到你的应用程序测试。

今天,我们来看看如何使用Xamarin.Firebase.Messaging包来构建一个基于FCM消息通知功能到你的应用中

建立Firebase Cloud Messaging

在你可以在你的应用程序中使用FCM服务之前,你通过Firebase控制台创建一个Firebase项目。在你登录后,点击CREATE NEW PROJECT,输入项目名,并点击 CREATE PROJECT:

【Xamarin.Android】在Android应用程序中实现推送通知_第1张图片

下一步,点击Add Firebase to your Android app。 当出现提示时,输入应用程序的包名并单击“注册应用程序”:

【Xamarin.Android】在Android应用程序中实现推送通知_第2张图片
【Xamarin.Android】在Android应用程序中实现推送通知_第3张图片

当你点击REGISTER APP,证书自动生成以便你的应用能够访问FireBase服务器。证书打包到一个名叫google-services.json的文件中, 当你点击REGISTER APP 按钮后证书自动下载, 保存好这个文件,后续你会用到它。

向项目添加包

下一步,你需要添加两个Xamarin NuGet包到你的应用中。启动NuGet 包管理器(在Visual Studio中,在解决方案浏览器右击References并选择Manage NuGet Packages), 浏览 Xamarin.GooglePlayServices.Base,选择它,并点击Install.

The Google Play Services package must be installed in order for FCM to work. Next, do the same for Xamarin.Firebase.Messaging:

将为这些包中的每一个安装额外的依赖包。

此外,要确保您在你的Anroid设备安装并拥有 Google Play Services APK。Firebase消息使用Google Play 涌 APK和Firebase服务器通信。

将谷歌服务JSON文件添加到项目中

当你在Firebase控制台创建一个项目,你将下载google-services.json 证书文件,现在将它插入到你的应用中!

拷贝google-services.json项目文件夹, 并将到添加到项目中(在Visual Studio中,你可以在浏览器解决方案点击Show All Files 图标,右击google-services.json,接着选择Include in Project)。

保存变得并关闭解决方案。重新打开解决方案并为google-services.json设置构建行为为GoogleServicesJson (在Visual Studio,   Build Action 弹出菜单在Advanced 一节的Properties 页):

【Xamarin.Android】在Android应用程序中实现推送通知_第4张图片

现在 google-services.json是项目的一部分,Xamarin构建处理能扩展这个证书并将它合并到AndroidManifest.xml 文件中。 Xamarin.Firebase.Messaging 使用这个证书来访问 Firebase服务。

添加实例ID接收器

你的客户机应用程序必须先注册FCM,然后才能收到推送通知。这是Xamarin.Firebase.Messaging接触FCM方法,发送它的证书,并接收注册令牌环返回的消息。这个道理,这是定期更新,以创造一个安全的通道,Firebase服务器。你也可以转发此令牌您的应用服务器,可以与Firebase服务。

你的应用必须实现FirebaseInstanceIdService来处理创建和更新信息环。这实际上比听起来简单得多,接下来你会看到。

在Android清单中声明实例ID接收器

编辑AndroidManifest.xml (在解决方案浏览器中点击Properties ) 并在 元素之后 插入到一节:

点击(此处)折叠或打开

  1. receiver
  2.     android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
  3.     android:exported="false" />
  4. receiver
  5.     android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
  6.     android:exported="true"
  7.     android:permission="com.google.android.c2dm.permission.SEND">
  8.     intent-filter>
  9.         action android:name="com.google.android.c2dm.intent.RECEIVE" />
  10.         action android:name="com.google.android.c2dm.intent.REGISTRATION" />
  11.         category android:name="${applicationId}" />
  12.     /intent-filter>
  13. /receiver>

这将声明用于管理注册令牌的必要接收者。


增加互联网的权限

如果你的权限列表没有启用 INTERNET 权限,在Properties > Android Manifest > Required 权限中启用它:

【Xamarin.Android】在Android应用程序中实现推送通知_第5张图片

实现Firebase Instance ID 服务

现在,是时候写代码了!添加一个新的CE文件到你的项目中(在Visual Studio, 右击项目名并选择Add > New Item > Class)。给它取名为MyFirebaseIIDService.cs 并输入如下代码:

点击(此处)折叠或打开

  1. using System;
  2. using Android.App;
  3. using Firebase.Iid;
  4. using Android.Util;
  5.  
  6. namespace FCMExample
  7. {
  8.     [Service]
  9.     [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
  10.     public class MyFirebaseIIDService : FirebaseInstanceIdService
  11.     {
  12.         const string TAG = "MyFirebaseIIDService";
  13.         public override void OnTokenRefresh()
  14.         {
  15.             var refreshedToken = FirebaseInstanceId.Instance.Token;
  16.             Log.Debug(TAG, "Refreshed token: " + refreshedToken);
  17.         }
  18.     }
  19. }


改变命名空间FCMExample为你应用的命名空间。

这就是它的全部!

当注册的令牌创建或者改变时执行OnTokenRefresh方法。因为当更新时,令牌输出日志到Output窗口,你就可以确认应用是否在运行。你将输入令牌到Firebase控制台,当你想要改善一个测试通知到你的应用时。

现在您的应用程序具有足够的功能来接收来自流媒体的背景通知,是时候进行测试了。在你构建应用之前,请确保应用包名匹配你在Firebase控制台创建你的Firebase项目时输入的包名。

重新构建你的应用,运行它,并观察Output窗口,直到显示令牌信息。比如:

将此令牌复制到剪贴板; 在下面的步骤中你将会粘贴到Firebase控制台。

发送消息

登录到 Firebase 控制台,选择你的项目,点击Notifications,再点击SEND YOUR FIRST MESSAGE:

【Xamarin.Android】在Android应用程序中实现推送通知_第6张图片

Compose message 页,在Message text中输入消息。选择Single device 作为目标,并将你IDE Output窗口拷贝的令牌信息粘贴到注册令牌框中:

【Xamarin.Android】在Android应用程序中实现推送通知_第7张图片

在点击 SEND MESSAGE之前, 将应用切换到后台运行(你可以触摸Android overview按钮并点击home屏)。当你在Firebase控制台准备好时点击 SEND MESSAGE。当 Review message 对话框显示时,点击SEND。通知图标就会出现在Android设备上:

【Xamarin.Android】在Android应用程序中实现推送通知_第8张图片

打开通知查看消息;通知消息应该正是你在Firebase控制台录入的:

【Xamarin.Android】在Android应用程序中实现推送通知_第9张图片

祝贺您,您刚刚发送并接收了第一个FCM推送通知!

了解更多

这个简单的示例只涉及到使用Visual Studio中的FCM和推送通知所能做的工作。为了解更多关在Visual Studio和其它平台使用Xamarin.Android,在其中使用Firebase云消息服务,一定要阅读 Firebase Cloud Messaging 和Remote Notifications with Firebase Cloud Messaging.  FCMNotifications 示例应用程序还是,如果你建立一个应用程序,使用FCM的推送通知借代码从一个好地方。