我们正在尝试使用Azure Notification Hub通过GCM / Firebase向Xamarin Forms应用程序发送推送通知。
这是我们用于在PCL中创建MobileServiceClient对象的代码:
public App()
{
mobileServiceClient = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient("https://namespace.servicebus.windows.net/NotificationHubName", new ModernHttpClient.NativeMessageHandler());
}
据我了解文档,我们不使用自定义HTTP处理程序并不重要,因为我们不需要提供任何额外的标头或类似的东西。我们只想要通知,此时我们不要求Azure提供身份验证(我们使用Azure Active Directory B2C)。我可能错了,因为丢失的身份验证标头显然会导致未经授权的异常。
这是我们用来尝试向Azure Notification Hub注册我们的应用程序的代码:
public async void Register(Microsoft.WindowsAzure.MobileServices.Push push, IEnumerable<string> tags)
{
try
{
const string templateBodyGCM = "{\"data\":{\"message\":\"$(messageParam)\"}}";
JObject templates = new JObject();
templates["genericMessage"] = new JObject
{
{"body", templateBodyGCM}
};
await push.RegisterAsync(RegistrationID, templates);
Log.Info("Push Installation Id", push.InstallationId.ToString());
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
Debugger.Break();
}
}
不幸的是,await push抛出异常.RegisterAsync(RegistrationID,templates):
{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: The request could not be completed. (Unauthorized)
我们成功从GCM收到注册ID,并在尝试向Azure注册我们的应用程序以获取推送通知时获取异常。
不幸的是,大多数有关通知中心的示例使用的旧代码不需要MobileServiceClient构造函数中的第二个参数。代码基于此存储库:https://github.com/xamarin/xamarin-forms-samples/tree/master/WebServices/TodoAzurePush
提前感谢您的帮助!
编辑:测试设备上的日期/时间同步已打开。这显然导致了其他开发人员的类似问题,但这似乎不是问题。
答案 0 :(得分:1)
mobileServiceClient = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient(“https://namespace.servicebus.windows.net/NotificationHubName”,new ModernHttpClient.NativeMessageHandler());
根据您的描述和错误,我发现您已将错误的url参数传递给MobileServiceClient对象。
Microsoft.WindowsAzure.MobileServices.MobileServiceClient的网址是您的移动应用的网址,而不是通知中心网址。
如下所示:
mobileServiceClient = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient("http://yourmobileappname.azurewebsites.net", new ModernHttpClient.NativeMessageHandler());
在移动服务门户中设置与通知中心的连接后,azure移动SDK将自动根据正确的MobileServiceClient获取推送对象。
我建议您还可以检查您是否已连接到移动应用中的通知中心,如下所示: