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.
我正在开发一个需要实现通知的 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.