一些背景......我正在构建一个Xamarin.Forms移动应用程序,以允许监视来自位于用户家中的设备的能量数据(被推送到后端并每分钟存储一次)。从我的(Azure Worker Role)后端,我希望能够通过Azure Notification Hub发送推送通知。有时我会想要推送到所有设备,有时候,推送到群组,有时推送到单个设备(我相信'标签'是这样做的方式)。我目前已配置Azure通知中心,我可以将测试消息(从Azure门户)发送到我用于测试的所有iOS设备。
我正在做的事情是弄清楚如何使用通知中心注册每个设备。我想要发生的是,当用户登录移动应用程序时,设备“句柄”(或设备令牌)将传递回服务器。然后可以将其保存在后端,并使用基于https://msdn.microsoft.com/en-us/library/azure/dn743807.aspx和Registering device on Azure Notification Hub from ASP.NET提供的示例的代码注册设备,以及更改后端上的关联“标记”。然后,如果我需要向单个设备或一组设备发送通知,我可以从工作者角色中获取设备句柄。
我找到了许多例子,似乎都缺少了让我能够正常工作的重要信息。我发现的大多数示例似乎都依赖于使用Azure移动应用程序(以及MobileServiceClient类),但我使用的是“常规”MVC5 ASP.NET Web应用程序。我已经注意到移动应用程序和Web应用程序Azure门户允许我配置“推送”,所以我可以支持从两者推送。我尝试将RegisterController添加到我的Web App中,但这在调用时似乎没有帮助:
var push = PushNotificationsManager.DefaultManager.CurrentClient.GetPush();
push.RegisterAsync(deviceToken, templates);
基于代码示例提供:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-xamarin-forms-get-started-push#create-hub。推客户端在哪里:
client = new MobileServiceClient("http://mywebapp.azurewebsites.net");
RegisterAsync尝试呼叫的端点是什么?我没有错。
Registering device on Azure Notification Hub from ASP.NET似乎建议我需要在我的Web App中添加RegisterController,但是它没有显示Xamarin.Forms代码来调用它。
那么,如何通过MVC5 Web应用程序从带有Azure通知中心的Xamarin.Forms应用程序注册移动设备?
答案 0 :(得分:1)
根据您的描述,我假设您使用的是App Service Push配置,这是Azure Portal提供的功能。您只需登录Azure门户,选择您的App Service,然后单击“设置>推送”以配置您的通知中心。
对于您的Xamarin.Form客户端,您需要安装包Microsoft.Azure.Mobile.Client,然后在MobileServiceClientExtensions.cs下使用GetPush
的扩展方法IMobileServiceClient
(注意< / strong>:这适用于UWP)和PushHttpClient.cs针对App Service Push提供的内置端点push/installations
发送注册请求。
根据您的代码,您是以正确的方式完成的。我建议您在注册设备时利用fiddler捕获网络跟踪。此外,您可以利用VS下的服务器资源管理器来检查您现有的注册,您可以关注的详细信息here。
此外,您还可以创建自定义Web API端点以注册通知。有关更多详细信息,您可以按Azure Notification Hubs Notify Users with .NET backend创建后端以及客户端项目的相关代码。此外,我建议您按照Registration management更好地了解注册和安装模型,以实现您的目的。
答案 1 :(得分:1)
你要找的是这样的。
在您的网络API中获取用户Ios设备的令牌。
var _hubClient=NotificationHubClient.CreateClientFromConnectionString(YourConnectionstring here)
//this is notification hub client
var registrationId= await _hubClient.CreateRegistrationIdAsync();
上面的代码会为你创建一个registrationId。之后
var registration = new GcmRegistrationDescription(devicetoken)
{
RegistrationId = RegistrationId , //one we got in previous
call.
Tags = new HashSet<string>
{
"YourDesiredTag"
}
};
//this completes registration of your device with desired tags.
_hubClient.CreateOrUpdateRegistrationAsync(registration);
现在您的注册已完成。您只需发送来自您的工作人员角色的通知即可定位标记,并且通知应该会到达所需的设备。
_hubClient.SendGcmNativeNotificationAsync(notifPayload, tags)
获取更多信息
上面的代码可能对gcm / android有效,但是可以遵循的标准。