2016-01-21 96 views
3

寫在德爾福10西雅圖,作爲Windows的'推杆',接收器爲iOs(現在)。目標是能夠將消息推送給特定用戶而不依賴於廣播和客戶端過濾。推送給特定用戶

我已經成功地實現到目前爲止以下幾點:1。 發送廣播推到我的iOS應用 2.登錄的用戶在我的iOS應用 3.創建我的安裝記錄用戶的指針 - > _用戶

這就像我可以在德爾福得到的那樣。據我所知,我必須在登錄時更新安裝記錄以反映登錄用戶的安裝情況。

我無法找到如何在Delphi的Parse/BAAS對象中做到這一點。什麼似乎缺少的是,我無法獲得登錄的用戶安裝ID。我假設我可以通過TBackendStorage Class來更新它。

任何幫助,將不勝感激。

我已經將此問題發佈到Embarcadero論壇和社區網站。

+0

這次不知道我是否正確地得到了這個問題,但是如何將設備註冊到特定頻道(f.i.用戶名)然後發送到這個頻道? –

+1

雖然跟着@Uwe Raabe給我的帶領 - 我找到了答案。 安裝ID隱藏在PushEvents對象中,這裏是需要在PushEvents對象的DeviceRegistered事件中執行的代碼。: '如果PushEvents.InstallationValue.TryGetObjectID(fInstallationObjectId)then' 然後將以下更新安裝對象: 'JOP.AddPair( '__類型', '指針'); JOP.AddPair('className','_ User'); JOP.AddPair('objectId',fUserObjectId); JO.AddPair('User',JOP); BackendStorage.Storage.UpdateObject('_ Installation',fInstallationObjectId,JO,O);' –

+0

@ChristopherBurke很高興您找到了解決方案,並且非常歡迎。你知道你可以回答你自己的問題嗎? http://stackoverflow.com/help/self-answer 如果你這樣做,你的答案會更容易閱讀,你可能會得到進一步的答案投票。 – BIBD

回答

1

檢索用戶對象ID

var 
    ACreatedObject: TBackendEntityValue; // REST.Backend.MetaTypes 
begin 
    BackendUsers.Users.LoginUser('donald','#duck99',ACreatedObject); 
    fUserObjectId:=ACreatedObject.ObjectID; 
end 

更新與用戶對象ID

安裝假設你在安裝的表有一欄「用戶」上解析爲一個指向_User類的指針。

PushEventsDeviceRegistered事件:

var 
    JO,JOP:TJSonObject;  // System.JSON 
    O:TBackendEntityValue; // REST.Backend.MetaTypes 
begin 
    if PushEvents.InstallationValue.TryGetObjectID(fInstallationObjectId) then 
    begin 
    try 
     JO:=TJSONObject.Create; 
     JOP:=TJSONObject.Create; 
     JOP.AddPair('__type','Pointer'); 
     JOP.AddPair('className','_User'); 
     JOP.AddPair('objectId',fUserObjectId); 
     JO.AddPair('User',JOP); 
     BackendStorage.Storage.UpdateObject('_Installation', 
          fInstallationObjectId,JO,O); 
    finally 
     JO.Free; 
    end; 
    end 
end; 

要根據用戶名

注意,你可以通過創建JSON對象目標目標Push消息,但我已經使用了字符串與格式在這裏。

const 
    Target = '{"where":{"User":{"$select":{"query":'+ 
      '{"__type":"Pointer","className":"_User","where":'+   
      '{"username":"%s"}},"key":"objectId"}}}}'; 
begin 
    BackendPush.Target.Text:=Format(Target,['donald']); 
    BackendPush.Message:='Gratz on the Election Result'; 
    BackendPush.Push; 
end 

非本地變量/聲明

以下德爾福巴斯組分在設計時創建的。

ParseProvider: TParseProvider; 
PushEvents: TPushEvents; 
BackendUsers: TBackendUsers; 
BackendStorage: TBackendStorage; 
BackendPush: TBackendPush; 

下面的類(或全局)變量被稱爲:

fUserObjectId:string; // Must be set before push registration is activated. 
fInstallationObjectId:string; 

注:原代碼是完全測試,但我已經剪切/粘貼(和編輯,以去除不相關東西)所以原諒我,如果有任何剪切/粘貼錯誤。