-1

I need to send a Push notification out through Parse.com's API using Delphi.

I see there is a TParseApi but the documentation is, as usual, rather sparse on the subject.

How can I do this?

BIBD
  • 15,107
  • 25
  • 85
  • 137

2 Answers2

4

Drop a TParseProvider and a TBackendPush component onto a form or datamodule. Connect them and enter your credentials in the appropriate properties of the provider. Set the backend Message property to the message to send and call Push.

Uwe Raabe
  • 45,288
  • 3
  • 82
  • 130
2

There are at least three ways of doing this:

1) A direct method would be to create your own HTTP request with custom headers and JSON

Procedure TForm1.ParseDotComPushNotification(pushMessage: string);
var
  parseDotComUrl: string;
  JSON: TStringStream;
  webRequest: TIDHttp;
  response: string;
  whereJson: TJSONObject;
  alertJson: TJSONObject;
  mainJsonObject: TJSONObject;
begin
  parseDotComUrl := 'https://api.parse.com/1/push';

  // Modify the JSON as required to push to whomever you want to. 
  // This one is set up to push to EVERYONE.
  // JSON := TStringStream.Create('{ "where": {}, ' + '"data" : {"alert":"' 
  //           + pushMessage + '"}' + '}', TEncoding.UTF8);

  mainJsonObject := TJSONObject.Create;
  whereJson := TJSONObject.Create;
  mainJsonObject.AddPair(TJSONPair.Create('where', whereJson));
  alertJson := TJSONObject.Create;
  alertJson.AddPair(TJSONPair.Create('alert', pushMessage));
  mainJsonObject.AddPair(TJSONPair.Create('data', alertJson));
  JSON := TStringStream.Create(mainJsonObject.ToJSON);
  mainJsonObject.Free; // free all the child objects.

  webRequest := TIDHttp.Create(nil);
  webRequest.Request.Connection := 'Keep-Alive';
  webRequest.Request.CustomHeaders.Clear;
  webRequest.Request.CustomHeaders.AddValue('X-Parse-Application-Id', 
             'YourApplicationID');
  webRequest.Request.CustomHeaders.AddValue('X-Parse-REST-API-KEY',
             'YourRestApiKey');
  webRequest.Request.ContentType := 'application/json';
  webRequest.Request.CharSet := 'utf-8';
  webRequest.Request.ContentLength := JSON.Size;
  try
    try
      response := webRequest.Post(parseDotComUrl, JSON);
    except
      on E: Exception do
      begin
        showmessage(response);
      end;
    end;
  finally
    webRequest.Free;
    JSON.Free;
  end;
end;

Thus bypassing the need for TParseApi

2) Based on UweRabbe's answer, you can also do it like this in code:

procedure TForm1.parseProviderCodeButtonClick(Sender: TObject);
var
  myParseProvider: TParseProvider;
  myBackendPush: TBackendPush;
  myStrings: Tstrings;
  whereJson: TJSONObject;
  alertJson: TJSONObject;
  mainJsonObject: TJSONObject;
begin
  mainJsonObject := TJSONObject.Create;
  whereJson := TJSONObject.Create;
  mainJsonObject.AddPair(TJSONPair.Create('where', whereJson));
  alertJson := TJSONObject.Create;
  alertJson.AddPair(TJSONPair.Create('alert', pushMessage));
  mainJsonObject.AddPair(TJSONPair.Create('data', alertJson));

  myParseProvider := TParseProvider.Create(nil);
  myParseProvider.ApiVersion := '1';
  myParseProvider.ApplicationID := 'YourApplicationID';
  myParseProvider.MasterKey := 'YourMasterKey';
  myParseProvider.RestApiKey := 'YourRestApiKey';

  myBackendPush := TBackendPush.Create(nil);
  myBackendPush.Provider := myParseProvider;
  // myBackendPush.Message := 'Hello world';

  myStrings := TStringList.Create;
  myStrings.Clear;

  // I like putting the message in when I generate the JSON for the Target
  // (since it seems I have to do it anyways, my not do it all in one place).
  // You could however us TBackendPush.Message as I've commented out above.
  // myStrings.Add('{ "where": {  }, "data" : {"alert":"goodbye world"}}');
  myStrings.Add(mainJsonObject.ToJSON);
  myBackendPush.Target := myStrings;
  myStrings.Free;
  mainJsonObject.Free; // free all the child objects.

  myBackendPush.Push;

  myBackendPush.Free;
  myParseProvider.Free;
end;

3) And to round this out into one complete answer (again based on UweRabbe's answer)

On your form/datamodule:

  1. Place a TParseProvider
  2. Place a TBackendPush - this should automatically set its Provider filed to the name of the TParseProvider you created in the previous step.
  3. Set the TBackendPush's ApplicationID, MasterKey, RestApiKey, and Message properties
  4. Set the TBackendPush's Push method from code.

e.g.,

procedure TForm1.Button1(Sender: TObject);
begin
  BackendPush1.Push;
end;
BIBD
  • 15,107
  • 25
  • 85
  • 137