向已注册的Android设备发送推送通知时出现PNS错误

时间:2016-06-14 15:33:52

标签: android azure azure-notificationhub

我正在设置一项服务,使用Azure通知中心向我们的应用发送推送通知。注册Android设备工作正常(在VS 2015 Azure工具中正确显示)但是当我尝试通过Azure门户或VS 2015测试发送工具发送测试帖时,我收到错误"推送通知系统句柄注册无效"并删除注册。我知道当通知中心收到错误时会删除注册,以便该部分有意义。我无法找到有关PNS无效的原因的任何信息。我的注册码是:

public class PushRegObject
{
    public string Platform { get; set; }
    public string Handle { get; set; }
    public string[] Tags { get; set; }
}

public async static Task<ObjectResultObject<string>> RegisterDevice(PushRegObject reg)
{
    string newRegistrationID = null;

    var hub = NotificationHubClient.CreateClientFromConnectionString(_connectionstring_, _name_);

    if (reg.Handle != null)
    {
        // Get the Registration ID
        var registrations = await hub.GetRegistrationsByChannelAsync(reg.Handle, 100);
        foreach(var registration in registrations)
        {
            if (newRegistrationID == null)
                newRegistrationID = registration.RegistrationId;
            else
                await hub.DeleteRegistrationAsync(registration);
        }

        if (newRegistrationID == null)
            newRegistrationID = await hub.CreateRegistrationIdAsync();

        // Register the Device
        RegistrationDescription regObj = null;
        switch (reg.Platform)
        {
            case "android":
                var regDesc = await hub.CreateGcmNativeRegistrationAsync(newRegistrationID);
                return new ObjectResultObject<string>(true, null) { Object = regDesc.GcmRegistrationId };
            case "ios":
                regObj = new AppleRegistrationDescription(reg.Handle);
                break;
            default:
                return new ObjectResultObject<string>(false, "Unknown device type");
        }
    }

    return new ObjectResultObject<string>(true, null) { Object = newRegistrationID };
}

有什么想法吗?

更新 在Dmitry帮助缩小问题范围的过程中,我找到了在CreateGcmNativeRegistrationAsync调用中使用GCM完整令牌返回的解决方案。

var regDesc = await hub.CreateGcmNativeRegistrationAsync(reg.Handle);

1 个答案:

答案 0 :(得分:1)

杰森,我的名字是德米特里,我在Notification Hubs团队工作。以下几个步骤可帮助我们解决此问题。

  1. 使用NotificationHubClient.GetAllRegistrationsAsync(100)从通知中心获取所有注册,从您的测试Android设备中找到注册,并将此注册的GcmRegistrationId与设备从GCM收到的实际注册ID进行比较。
  2. 如果上一步中的注册ID相同,请确保已将正确的GCM API密钥上载到通知中心。
  3. 如果通知中心中的GCM凭据正确无误,请尝试使用某些第三方工具向您的设备发送通知,例如Google建议的cURL和命令行 - https://developers.google.com/web/fundamentals/getting-started/push-notifications/step-07?hl=en。确保使用通知中心中配置的相同API密钥和上载到通知中心的注册ID。
  4. 如果您能够使用第三方工具成功向设备发送通知,请将命名空间和通知中心名称发送至nhubsupport@microsoft.com,我们即可查看。