C# Firebase云消息传递和Azure通知中心设备注册相互实施

C# Firebase云消息传递和Azure通知中心设备注册相互实施,c#,push-notification,xamarin.android,firebase-cloud-messaging,azure-notificationhub,C#,Push Notification,Xamarin.android,Firebase Cloud Messaging,Azure Notificationhub,我正在开发一个xamarin应用程序,需要在其中实现通知。我们决定使用azure来管理它们,但是真正发送通知的是firebase,因此设备需要在NotificationHub和firebase服务中注册 我已经成功地通过使用WindowsAzure.Messaging组件和Xamarin-firebase Messagingnuget直接在手机上完成了这项工作 但我在某个地方读到,建议从应用程序后端执行此操作,所以我现在正尝试这样实现它 因此,我的新“后端”(实际上是一个wcf服务)基于此(我的

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

我已经成功地通过使用WindowsAzure.Messaging组件和Xamarin-firebase Messagingnuget直接在手机上完成了这项工作

但我在某个地方读到,建议从应用程序后端执行此操作,所以我现在正尝试这样实现它

因此,我的新“后端”(实际上是一个wcf服务)基于此(我的ws的简化版本):


这行代码在NotificationHub中注册设备,但不在firebase中注册。关于如何解决此问题,有什么想法吗?

根据您的描述,我按照此示例中的代码示例使用了
NotificationHub.Register
并检查此问题。我可以通过Visual Studio Server Explorer使用测试发送和Azure门户中的测试发送来接收通知

注册的推送通知系统句柄不再有效


根据您的场景,我假设您在Azure通知中心上的注册可能无效(例如过期)。我们建议您在应用程序启动时需要重新注册。此外,您还可以参考此文档,了解Azure通知中心的疑难解答。对于Service Bus Explorer,您可以参考。

是的,我以前曾设法使其正常工作,但Gcm是否已被弃用?您可以向Azure Mobile App后端查询。设备注册对我不起作用。尝试从后端安装设备。在这里我发布了我的解决方案,三周后我发现我的代码是好的,只是我测试错了。你不能给自己发送通知。希望会有帮助。
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;
    }
}
await hub.CreateOrUpdateRegistrationAsync(registration);