Azure移动服务 - 推送通知注册无法正常工作[ios]

时间:2015-07-24 09:21:03

标签: ios azure push-notification azure-mobile-services azure-notificationhub

我正在构建一个连接到Azure移动服务后端的iOS应用程序,以便每次在表格中插入新项目时发送推送通知。似乎注册无效,因为在通知中心的仪表板中我可以看到一些“注册操作”,但我在Visual Studio Server Explorer中看不到任何注册,推送通知也没有到达设备。

我使用此代码在我的iOS客户端上注册远程通知。这段代码运行正常,我没有收到任何错误。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [self.client.push registerNativeWithDeviceToken:deviceToken tags:nil completion:^(NSError *error) {
        if (error != nil) {
            NSLog(@"Error registering for notifications: %@", error);
        }
    }];
}

执行此代码是为了在移动服务的表存储中插入新项目。

NSDictionary *dbitem = @{ @"message" : @"test"};       
MSTable *itemTable = [client tableWithName:@"TestTable"];
[itemTable insert:dbitem completion:^(NSDictionary *insertedItem, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Item inserted, id: %@", [insertedItem objectForKey:@"id"]);
    }
}];

插入工作正常,项目显示在表存储中。每次在表中插入新项目时,此脚本都将运行(Javascript - Node.js Backend)

function insert(item, user, request) {
    var userId = user.userId;
            request.execute({
        success: function() {
            request.respond();
            push.apns.send(userId, {
                    alert: "Hello!",
                    payload: {
                        inAppMessage: item.message
                    }
            });
        }

    });
}

最后这里是我用来注册推送通知新用户的注册脚本。

exports.register = function (registration, registrationContext, done) {   
    // Get the ID of the logged-in user.
    var userId = registrationContext.user.userId;    
console.log("userid: %j", userId);
    // Perform a check here for any disallowed tags.
    if (!validateTags(registration))
    {
        // Return a service error when the client tries 
        // to set a user ID tag, which is not allowed.      
        done("You cannot supply a tag that is a user ID"); 
        console.log("failed registraion");     
    }
    else{
        // Add a new tag that is the user ID.
        registration.tags.push(userId);
        console.log("done registraion");     
        // Complete the callback as normal.
        done();
    }
};

function validateTags(registration){
    for(var i = 0; i < registration.tags.length; i++) { 
        console.log(registration.tags[i]);           
        if (registration.tags[i]
        .search(/facebook:|twitter:|google:|microsoft:/i) !== -1){
            return false;
        }
        return true;
    }
}

正如您在Visual Studio Server Explorer的屏幕截图中看到的那样 - 通知中心没有注册。 Visual Studio Server Explorer 管理门户中监视器选项卡的输出位于此处。 Monitoring

我知道这是一个很长的问题,但是如果你知道未到达推送通知的问题是什么 - 请告诉我! 谢谢

1 个答案:

答案 0 :(得分:0)

在didRegisterForRemoteNotificationsWithDeviceToken函数中,您将获得一个以&#39;&lt;&#39;并以&#39;&gt;&#39;结束。

你应该尝试删除这些字符,快点我做了这个:

var deviceTokenString = "\(deviceToken)"
deviceTokenString = deviceTokenString.stringByReplacingOccurrencesOfString("<", withString: "")
deviceTokenString = deviceTokenString.stringByReplacingOccurrencesOfString(">", withString: "")

显然注册成功(这就是为什么永远不会调用FAailToRegisterForRemoteNotificationsWithError),但它也失败了,很奇怪。

我很高兴您导航到您的移动服务,推送选项卡并单击通知中心。在服务总线通知中心,您有一个调试选项卡,可用于测试您的通知。每次从那里发送通知时,您都可以看到包含注册的列表。

希望这会有所帮助。