我想使用Azure通知中心向iOS,Android和Windows Phone上运行的应用用户发送推送通知。
我已经设法使基础工作正常但我不知道如何管理App卸载故事。
启动时,移动应用程序将调用我的Identity Svc获取Auth Token。 然后,它会调用其平台通知服务(例如Google Cloud Messaging,APNS)来获取PNS令牌。 将令牌持久保存到本地存储后,它将调用后端Contact Svc来注册客户的设备。此服务将为设备的Azure Notification中心创建订阅。
如下图所示:
稍后,后端发布服务将致电联系服务,请求针对特定用户ID的推送通知。联系服务将查找分配给通知中心上的标记的Id,并发送推送请求。
有哪些选项可用于确定客户何时卸载应用?是否只是在通知中心上调用“发送”时捕获错误?我想如果只发送给单个用户,这可能会有效,但我的意图是要将某些消息类型发布给多个订阅者。在设备的初始注册时,将为用户id的标签创建订阅,但也为诸如“新推广”的更通用的标签创建订阅。发布服务稍后将要向所有设备发出“新推广”通知。
答案 0 :(得分:4)
为什么你需要知道app卸载?
通知中心会自动使已卸载设备的注册失效。 另外,我会避免将PNSHandles保留在你的服务中。
目前使用集线器的准则如下:
将与设备关联的注册的registrationIds存储在本地存储中。这使您可以通过单个更新调用更新标签和通道信息。 由于移动连接并不总是可靠的,因此最好避免创建新的注册,而无法将registrationId存储在本地存储中。这可能导致设备多次注册,从而导致重复通知。您可以使用“创建注册ID”和“创建或更新注册REST API”来实现此目的。 第一个API返回registrationId而不实际创建注册。当ID已安全地存储在设备存储中时,设备可以调用创建或更新注册API。
所以我希望你的ContactSvc有两个功能: a)创建注册ID(只需调用hub来获取它) b)创建或更新给定的注册(registrationId,pnsHandle,tags?)
然后你的设备在从PNS获取句柄之后将regId保存在其存储中,如果没有regId那么创建一个带有端点a)的新的,然后用pnsHandle和标签更新注册。
请注意,通过这种方式,您的服务不需要保留句柄或UUID,也不需要担心应用程序卸载。
如果您要跟踪用户,一种方法是定期(每月一次?)检查您的中心,如果其注册仍然存在...
如果不清楚,可以通过@eliodamaggio联系我。