推送给特定用户

时间:2016-01-21 13:23:35

标签: delphi parse-platform push-notification delphi-10-seattle

在Delphi 10 Seattle中编写,将“推送器”定位为Windows,将接收器定位为iOs(目前)。目的是能够在不依赖广播和客户端过滤的情况下将消息推送给特定用户。

到目前为止,我已成功实现以下目标: 1.向我的iOS应用发送广播推送 2.以我的iOS应用程序的用户身份登录 3.在我的用户安装记录中创建一个指针 - > _user

这就是我在Delphi中所能得到的。根据我的理解,我必须在登录时更新安装记录以反映登录用户的安装。

我无法在Delphi的Parse / BAAS对象中找到如何做到这一点。似乎缺少的是我无法获取登录用户的安装ID。我假设我可以通过TBackendStorage类更新它。

任何帮助将不胜感激。

我已将此问题交叉发布到Embarcadero论坛和社区网站。

1 个答案:

答案 0 :(得分:1)

检索用户对象ID

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

使用用户对象iD更新安装

假设您有一个专栏' User'在Parse上的Installation表中作为指向_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对象创建目标,但是我在这里使用了带格式的字符串。

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

非本地变量/声明

以下Delphi BaaS组件是在设计时创建的。

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

引用以下类(或全局)变量:

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

注意:原始代码已经过全面测试,但我已经剪切/粘贴(并进行了编辑以删除不相关的内容),如果有任何剪切/粘贴错误,请原谅我。