Firebase Cloud 消息传递和 Azure Notification Hubs 设备注册相互实现

Firebase Cloud messaging and Azure Notification Hubs device registration mutual implementation

我正在开发一个需要实现通知的 xamarin 应用程序。我们决定使用 azure 来管理它们,但是实际发送通知的是 firebase,因此设备需要在 NotificationHub 和 Firebase 服务中注册。

我已经成功 直接在 phone 上使用 WindowsAzure.Messaging 组件和 Xamarin - firebase 消息 nuget.

但我在某处读到建议从应用后端执行此操作,所以我现在正尝试那样实现它。

所以我的 new "backend"(实际上是一个 wcf 服务)是基于这个 guide(我的 ws 的简化版本):

public async Task<string> RegistrerCampusHubs(Device device)
{
    RegistrationDescription registration = null;
    string newRegistrationId = device.Id;

    try
    {
        if (device.Regitration.Handle != null)
        {
            var registrations = await hub.GetRegistrationsByChannelAsync(device.Regitration.Handle, 100);

            foreach (RegistrationDescription reg in registrations)
            {
                if (newRegistrationId == null)
                {
                    newRegistrationId = reg.RegistrationId;
                }
                else
                {
                    await hub.DeleteRegistrationAsync(reg);
                }
            }
        }

        if (newRegistrationId == null)
        {
            newRegistrationId = await hub.CreateRegistrationIdAsync();
        }

        switch (device.Regitration.Platform)
        {
            case "mpns":
                registration = new MpnsRegistrationDescription(device.Regitration.Handle);
                break;
            case "wns":
                registration = new WindowsRegistrationDescription(device.Regitration.Handle);
                break;
            case "apns":
                registration = new AppleRegistrationDescription(device.Regitration.Handle);
                break;
            case "gcm":
                registration = new GcmRegistrationDescription(device.Regitration.Handle);
                break;
        }

        registration.RegistrationId = newRegistrationId;
        registration.Tags = new HashSet<string>(device.Regitration.Tags);

        await hub.CreateOrUpdateRegistrationAsync(registration);

        return "Success";
    }
    catch (Exception e)
    {
        return "Failed: " + e.Message;
    }
}

这似乎有效,因为我可以在通知中心看到已注册的设备,但是当我尝试发送消息时,我从 visual studio 中的通知中心测试发件人收到以下错误:

The Push Notification System handle for the registration is no longer valid

我做了一些测试,我得出的结论是问题是设备没有在 firebase 中注册。

await hub.CreateOrUpdateRegistrationAsync(registration);

这行代码在 NotificationHub 中而不是在 firebase 中注册设备。关于如何解决此问题的任何想法?

根据您的描述,我按照tutorial for using NotificationHub.Register and Enable Firebase Cloud Messaging中的代码示例检查了这个问题。我可以通过 Visual Studio Server Explorer 使用 Test Send 和来自 Azure Portal 的 Test Send 来接收通知。

The Push Notification System handle for the registration is no longer valid

根据您的情况,我假设您在 Azure 通知中心的注册可能无效(例如已过期)。我们建议您在每次启动应用程序时都需要重新注册。另外,你可以参考这个tutorial for troubleshooting with Azure Notification Hubs. For Service Bus Explorer, you could refer to here.