当前位置: 首页 > 知识库问答 >
问题:

Xamarin Firebase Cloud Messaging for iOS(appDelegate)RemoteMessageDelegate错误

沈飞翼
2023-03-14

我正在尝试将iOS处理程序的通知迁移到firebase服务器。在AppDelegate.cs文件中,xamarin站点(https://components.xamarin.com/gettingstarted/firebaseIosCloudMessaging)上的文档步骤之一如下:

// Register your app for remote notifications.
if (UIDevice.CurrentDevice.CheckSystemVersion (10, 0)) {
    // iOS 10 or later
    var authOptions = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound;
    UNUserNotificationCenter.Current.RequestAuthorization (authOptions, (granted, error) => {
        Console.WriteLine (granted);
    });

    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.Current.Delegate = this;

    // For iOS 10 data message (sent via FCM)
    Messaging.SharedInstance.RemoteMessageDelegate = this;
} else {
    // iOS 9 or before
    var allNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound;
    var settings = UIUserNotificationSettings.GetSettingsForTypes (allNotificationTypes, null);
    UIApplication.SharedApplication.RegisterUserNotificationSettings (settings);
}

UIApplication.SharedApplication.RegisterForRemoteNotifications ();

两行代码,Messaging.SharedInstance....和UnuserNotificationCenter.Current...接收appdelegate工作负载。要使appdelegate实现Usernotificationcenterdelegate,可以使用以下方法。但是,这对Firebase消息委托不起作用。无法识别firebase消息委托。我已经安装了云消息包(V1.2.1.1)、analytics(3.6.0)、Core(3.4.5)和实例ID(1.0.8)。这些软件包是通过Nuget软件包管理器安装的。

有没有人知道为什么找不到FIRMessagingDelegate,或者是否需要为这些版本的iOS包做一些特定的事情?

共有1个答案

梁俊智
2023-03-14

FirmessagingDelegate命名为IMessagingDelegate:

[Protocol (Name = "FIRMessagingDelegate", WrapperType = typeof(MessagingDelegateWrapper)), ProtocolMember (IsRequired = true, IsProperty = false, IsStatic = false, Name = "ApplicationReceivedRemoteMessage", Selector = "applicationReceivedRemoteMessage:", ParameterType = new Type[] {
 typeof(RemoteMessage) }, ParameterByRef = new bool[] { false }), Introduced (PlatformName.iOS, 10, 0, PlatformArchitecture.None, null)]
public interface IMessagingDelegate : INativeObject, IDisposable
{
  ~~~

在您的UIApplicationDelegate上实现IMessagingDelegate:

[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate, IMessagingDelegate
{
    ~~~~

    public void ApplicationReceivedRemoteMessage(RemoteMessage remoteMessage)
    {
       Console.WriteLine(remoteMessage);
    }

    ~~~~
}
 类似资料:
  • 问题内容: 在我的SwiftUI项目中,我同时看到文件和文件。 它们之间有什么区别? 例如,在 并在 问题答案: 这两个文件旨在按整体运行应用程序所需的内容以及将支持在后台运行的一个“实例”所需的内容进行拆分。这将类似于一次配置数据库,但按窗口显示不同的值集。 您可以将它们视为全局和私有版本。一个是共享的,另一个则限于个人所有者。在某种程度上,它们正是您所期望的名称。 多窗口支持正在发生 下次创建

  • 问题内容: 在遵循一些指南时遇到问题,特别是 http://blog.originate.com/blog/2014/04/22/deeplinking-in- ios/ 我正在设置url方案,并且可以很好地从另一个应用程序启动该应用程序,但是传入主机或url不能正常工作。我正在为所有视图布局使用情节提要和界面生成器。 指南在appDelegate中显示此openURL: 这是我的版本经过简化并从

  • 问题内容: 我刚刚下载了新的Xcode 7.0 beta,并完成了从Swift 1.2到Swift 2的迁移。迁移显然并没有改变整个代码,实际上,方法saveContext()很好,直到抛出2条错误为止: 二进制运算符“ &&”不能应用于两个布尔操作数 和 可以抛出呼叫,但未将其标记为“ try”,并且未处理错误 该方法如下所示: 关于如何使其运作的任何想法? 问题答案: 您提供的两个错误中的第一

  • 问题内容: 我需要支持iOS 12和iOS 13。 我应该在和之间复制代码吗? 例如: 和 如果我不这样做,则在1个版本中,我最终会出现黑屏,但是如果我这样做并以的方式打印,则可以看到它被称为两次。 我进行了更新,可以看到它仍然被调用了两次。 问题答案: 您确实需要复制代码,但需要确保它仅在正确的系统上运行。在iOS 13中,您不希望该应用程序委托主体代码运行,因此请使用可用性检查来阻止它。以相同

  • 问题内容: 当用户单击UILocalNotification时,我试图迅速从应用程序委托中加载特定的ViewController。我已经知道这是在此函数中调用的: 但是当我尝试访问一个打开的ViewController时,我认为它返回null,因为我的应用程序崩溃了。这是我正在尝试的: 在popToViewController行上崩溃了。 问题答案: 您可以尝试: 斯威夫特3:

  • 问题内容: 在我的Xcode项目中,当用户点击通知时,我想先将其发送到tabBar中的某个项目,然后再实例化视图控制器并将对象发送到该视图控制器。我有将它们发送到所需的tabBar的代码,但我不知道如何在将tabBar和导航栏保持与视图控制器连接的同时将它们实例化到视图控制器。关于此问题的所有答案都需要您更改根视图控制器,这使我在调用视图控制器时失去了与tabBar和导航栏的连接。 一个真实的例子