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

Posted

技术标签:

【中文标题】Firebase Cloud 消息传递和 Azure Notification Hubs 设备注册相互实现【英文标题】:Firebase Cloud messaging and Azure Notification Hubs device registration mutual implementation 【发布时间】:2017-05-18 16:49:04 【问题描述】:

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

我已经成功直接在手机上执行此操作,使用 WindowsAzure.Messaging 组件和 Xamarin - firebase 消息传递 nuget。

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

所以我的“后端”(实际上是一个 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 中的通知中心测试发件人收到以下错误:

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

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

await hub.CreateOrUpdateRegistrationAsync(registration);

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

【问题讨论】:

【参考方案1】:

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

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

根据您的情况,我假设您在 Azure Notification Hub 上的注册可能无效(例如已过期)。我们建议您在应用启动时需要重新注册。此外,您可以参考此tutorial 以了解有关 Azure 通知中心的故障排除。对于 Service Bus Explorer,您可以参考here。

【讨论】:

是的,我之前设法让它工作了,但 Gcm 不是已弃用吗? 您可以使用 Azure 移动应用后端检查 push notifications to Xamarin.android app。 设备注册对我不起作用。尝试设备安装表单后端。在这里我发布了我的解决方案,经过 3 周后发现,我的代码很好,只是我测试错了。您无法向自己发送通知。希望有所帮助。 ***.com/questions/46778371/…

以上是关于Firebase Cloud 消息传递和 Azure Notification Hubs 设备注册相互实现的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase Cloud Messaging 上通过 XMPP 传递上游消息的误解

在 Cloud Function for Firebase 中设置 Firebase 消息的优先级

Google Cloud Messaging与Firebase

如何在 webapp 中实现 firebase 云消息传递? [关闭]

React-Native - Firebase 云消息传递 - 如果从托盘打开则没有事件

Firebase Cloud Message iOS Swift 不工作