2015-02-09 108 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。

相關問題