使用REST服务从Javascript注册Azure Notification Hub失败

时间:2013-08-14 00:47:54

标签: azure azure-notificationhub

我正在尝试使用在Web视图主机(Phonegap / Intel XDK)中运行的html / javascript代码在Azure Notification Hub上进行注册。没有可用的客户端库,因此我尝试使用REST API(文档:)。

我有以下Javascript代码:

function registerWithAzureNotificationHub()
{
    var sas = "Endpoint=sb://eventpusher-ns.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=69XuYoluyBKl6JkkN03Z1oNC7cFSZ4Ku0ZWmPuWoJzs=";
    var data = '<?xml version="1.0" encoding="utf-8"?>\
    <entry xmlns="http://www.w3.org/2005/Atom">\
        <content type="application/xml">\
        <MpnsRegistrationDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">\
        <Tags>myTag, myOtherTag</Tags>\
        <ChannelUri>https://eventpusher-ns.servicebus.windows.net/eventpusher</ChannelUri>\
        </MpnsRegistrationDescription>\
        </content>\
    </entry>';
    if (AppMobi.iswp8) {
        window.alert("IS WP8");
    }
    else
    {
        window.alert("IS NOT WP8");
    }

    $.ajax({
        type:"POST",
        url: "https://eventpusher-ns.servicebus.windows.net/EVENTPUSHER/registrations/?api-version=2013-08",
        contentType: "application/atom+xml;type=entry;charset=utf-8",
        headers: {
            "Authorization": sas,
            "x-ms-version": "2013-08"
        },
        dataType: "xml",
        data: data,
        success: function(d) { window.alert("SUCCESS!"); },
        error: function(msg) { window.alert("FAILURE:" + JSON.stringify(msg)); }
    });
    window.alert("SENT!");
}

在上面的例子中,我使用英特尔XDK和WP8设备上运行的代码,所以我注册了MPNS(微软推送通知服务)。

上述代码失败,并返回没有关于错误原因的描述性信息。

问题:

  1. 是否可以使用REST服务从javascript代码注册Azure Notification Hub的移动设备?
  2. 上述代码有什么问题? ChannelUri是正确的Uri吗?

2 个答案:

答案 0 :(得分:4)

绝对可以从javascript使用REST界面。 在您的代码中有两个主要问题:

    在ChannelURI中
  1. ,您应该从WindowsPhone HttpPushNotificationChannel中检索channelURI(如this教程中所述)。
  2. 授权标头是为您的特定请求创建的标记。如上所述here
  3. 使用WinJS的示例是available。我们将尽快制作一个PhoneGap特定样本!

答案 1 :(得分:1)

我发布了一个服务器端代码段,用于将设备注册到集线器,并且可以在此处发送通知:

How to register devices to Azure Notification Hub from server side(with NodeJS sdk) ?

我也有使用Ionic中的ngCordova和PushPlugin的客户端代码,让我知道是否有人想看到它。