2015-02-09 111 views
0

我的问题是一样的,因为这一个:Android设备特定推送通知

android device specific push notifications by using azure mobile services

但我使用的.Net后端。这是我发送通知的部分:

Dictionary<string, string> data = new Dictionary<string, string>() { { "message", "this is the message" } }; 
GooglePushMessage message = new GooglePushMessage(data, TimeSpan.FromHours(1)); 

Services.Push.SendAsync(message); 

但是没有办法传入注册ID。

UPDATE

我使用GooglePushMessage的有效载荷性能也试过:

GooglePushMessage message = new GooglePushMessage(); 
message.JsonPayload = JsonConvert.SerializeObject(new { registration_id = "blablabla", data = new { message = "77" } }); 

事实证明,这是忽略了registration_id财产,因为我仍然得到通知我的设备。

我想实现的是从第三方获取API调用,并使用存储在我的数据库中的注册ID将通知发送到特定设备。

+1

您必须在该JSON对象内包含registration_id(我猜,消息是JSON对象)。 – user1728071 2015-02-09 11:38:14

+0

在JSON对象中包含registration_id不会改变结果,我可以设置一个随机的registration_id,并且仍然会在我的设备上获取通知。 – DevMonster 2015-02-10 08:58:40

+0

这很有趣。除非您在json中指定registration_id,否则GCM不会向所有人发送通知。发送JSON对象时一定有问题。发送到GCM时请检查消息内容。 – user1728071 2015-02-10 10:19:51

回答

3

移动服务使用通知中心来处理它的推送通知。通知中心使用标签系统过滤推送(即对特定设备,用户等进行目标推送)。所以,如果你希望能够推到一个特定的Android注册ID,当您的手机服务推送通知的设备寄存器,应指定要配合你的注册,像现在这样的标签:

ToDoActivity.mClient.getPush().register(gcmRegistrationId, "tag1", "tag2"); 

如果您想基于注册ID进行推送,您可以将该ID用作您的一个标签。然后从.NET后端调用SendAsync时,可以指定一个标记(或标记表达式)来定位特定设备。因此,我们推送的电话变为:

Services.Push.SendAsync(message,registrationID);

上述内容不正确。标签限制为120个字符(https://msdn.microsoft.com/en-us/library/dn530749.aspx),并且GCM注册ID对此太长。今天,你一直在使用少于120个字符的替代标签。如果设备上已知用户ID,则可以将其用作标签,然后从后端推送到该特定的用户ID。或者,您可以在应用启动时生成一个GUID,并将其用作标记,然后在您希望到达特定设备时从后端将该GUID推送到该GUID。

相关问题