你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

从设备使用 REST API

从移动设备使用 REST API 时,一种常见模式是在本地存储中存储与设备关联的注册的 registrationId。 它使你能够通过单个更新调用来更新标记和通道信息。

由于移动连接并非始终可靠,因此,在未能将 registrationId 存储在本地存储中时,最好避免创建新注册。 这可能会导致设备多次注册,从而导致重复通知。 可以使用 创建注册 ID创建或更新注册 REST API 来实现此目的。

第一个 API 返回 registrationId,而无需实际创建注册。 当 ID 安全地存储在设备存储中时,设备可以调用 创建或更新注册 API。

重要

要使设备本地存储与该中心保持同步(即使在本地存储数据丢失的情况下),建议你在每次本地存储未初始化时,删除包含当前通道的所有注册(即,ChannelURI、设备令牌或 GCM registrationId)。

以下 Javascript 代码使用 jQuery 创建 registrationId

var createRegistrationId = function() {
        var registrationPath = hub.hubPath + "/Registrations";
    var serverUrl = hub.endpoint + registrationPath
        + "?api-version=2015-01";

    var token = getSelfSignedToken(serverUrl,sasKeyValue,
        sasKeyName, 60);

    var deferred = $.Deferred();
    $.ajax({
        type : "POST",
        url : serverUrl,
        headers : {
            "Authorization" : token
        },
    }).done(function(data, status, response) {
        var location = response.getResponseHeader("Content-Location");
        deferred.resolve(location);
    }).fail(function(response, status, error) {
        console.log("Error: " + error);
        deferred.reject("Error: " + error);
    });
    return deferred.promise();
};

创建或更新操作 (“upsert”) 是返回位置上的简单 PUT 调用。 可以按照 从后端使用 REST API 部分中所述的相同方式构造注册 XML 正文。

以下 Javascript 代码示例演示了一个“upsert”操作:

var updateRegistration = function(location, registration) {
    var registrationPayload = buildCreatePayload(registration);
    var serverUrl = location;

    var token = getSelfSignedToken(serverUrl, sasKeyValue,
        sasKeyName, 60);

    var deferred = $.Deferred();
    return $.ajax({
        type : "PUT",
        url : serverUrl,
        headers : {
            "Content-Type" : "application/atom+xml",
            "Authorization" : token,
        },
        data : registrationPayload
    }).done(function(data, status, response) {
        var location = response.getResponseHeader("Content-Location");
        deferred.resolve(location);
    }).fail(function(response, status, error) {
        console.log("Error: " + error);
        deferred.reject("Error: " + error);
    });
    return deferred.promise();
};