如何在 iOS 的 Azure 移动应用通知中心注册目标推送通知
Posted
技术标签:
【中文标题】如何在 iOS 的 Azure 移动应用通知中心注册目标推送通知【英文标题】:How to register for targeted Push Notifications in Azure Mobile App notification hub from iOS 【发布时间】:2016-05-05 12:05:45 【问题描述】:我有一个在 Azure 移动应用服务中注册推送通知的移动应用。 在以前的版本(Azure 移动服务)中,我可以在注册时添加标签。出于安全原因,在当前的移动应用服务中删除了这种可能性。 在这个论坛的另一个帖子中,我读到我们需要创建一个自定义 API 来为目标通知添加诸如用户 ID 之类的标签。 Azure 中的文档只提到了 .NET,我需要用 javascript 来做。所以,我写了这个 API:
module.exports =
"put": function (req, res, next)
var token = req.query.token;
token = token.replace('<','');
token = token.replace('>',''); //Removing the token enclosures
token = token.replace(/\s+/g,''); //Removing the spaces in the token
req.azureMobile.push.apns.createNativeRegistration(token, req.azureMobile.user.id, function(error)
if (error)
console.log("Registration unsuccessful: ", error);
res.status(500).json( error: error );
else
var result = "Registration successful"
console.log(result);
res.status(201).json(result: result);
);
我用这个 Swift 代码从 ios 调用它:
self.client!.push?.registerDeviceToken(deviceToken, completion: (error) in
var results = Dictionary<String, AnyObject>()
if error == nil
let param = ["token":deviceToken]
AOAppDelegate.client!.invokeAPI("apnsRegistration", body: nil, HTTPMethod: "PUT", parameters: param, headers: nil, completion: (objects, httpResponse, error) in
if error != nil
print("Error registering for notifications: %@", error);
)
else
print("Error registering for notifications: %@", error);
)
这个过程在我的 iPhone 上运行得非常好,但在我的 iPad 上却不行,而且这个 iPad 没有什么特别的问题,这让我觉得代码有一些缺失。 此外,如果我转到 Azure 门户中的通知中心,它注册了 0 个标签,而注册的 iPhone 应该至少有一个标签可以正常工作。 测试推送通知也只向手机发送通知,而不向 iPad 发送通知。
有什么建议吗?我的代码有意义吗?
谢谢,
【问题讨论】:
检查你的测试推送是否被广播。如果是,那就是注册的问题。看起来您正在使用移动应用 API 而不是通知中心。你也可以检查一下吗?并使用 Service Bus Explorer 检查注册和标签 感谢您的回复亚历克斯。我已经配置了一个通知中心,但我找不到任何关于如何使用来自 Javascript 的中心注册标签的文档。你知道我在哪里可以找到一些信息吗? azure 中的代码示例仅在 .NET 中。 【参考方案1】:调用看起来不像是写的。尝试类似:
var promises = require('azure-mobile-apps/src/utilities/promises');
function createInstallation(context, installationId, pushChannel)
var installation =
installationId: installationId,
pushChannel: pushChannel,
platform: 'apns',
tags: [ 'some', 'list' ]
;
return promises.wrap(context.push.createOrUpdateInstallation, context.push)(installation);
module.exports =
post: function (req, res, next)
var context = req.azureMobile,
installationId = req.get('X-ZUMO-INSTALLATION-ID'),
pushChannel: req.body.pushChannel;
createInstallation(context, installationId, pushChannel)
.then((result) =>
res.status(204).end();
);
.catch(next);
context.push 只是包装了 Notification Hubs SDK,因此您可以从那里使用任何东西。
【讨论】:
谢谢阿德里安。 req.body.pushChannel 假设我需要在请求正文中发送 pushchannel? 正确 - 发送类似 "pushChannel": "以上是关于如何在 iOS 的 Azure 移动应用通知中心注册目标推送通知的主要内容,如果未能解决你的问题,请参考以下文章
如何在不更新 IOS 应用程序的情况下使用 Azure 通知中心
Xamarin和推送通知 - 使用Azure通知中心的原因?
Azure 通知中心:安装 ID 以及如何处理应用程序的卸载