11

我需要在 Delphi 中构建一个提供程序服务器,以通过 APNS 将推送通知消息发送到我的 iPhone 应用程序。

我读过这可以通过 Indy 组件来实现。还需要安装苹果提供的 SSL 证书(.p12)。

我正在寻找一些指针以在 Delphi 中开始使用它。什么是一个好的库可以使用,有没有人知道任何示例代码来做这样的事情?

以下是Ruby & PHPC#JAVA的示例

4

2 回答 2

5

好的,我按如下方式进行管理:在您的表单上
添加一个 indyTidTCPClientTIdSSLIOHandlerSocket链接它们。TIdSSLIOHandlerSocket将、 setCertFile和中的 SSL 选项设置KeyFile为适当的 .pem 文件。将方法设置为sslvSSLv23并将模式设置为sslmClient
IOHandler'OnGetPassword事件中设置您的密钥密码。

有用的网址:http: //developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html http://www.raywenderlich.com/3443/apple-push-notification-services -tutorial-part-12

在编码方面:

Nb HexData 是 iPhone App 发送的 ID

function SendNotification(HexData: String; Count: Integer): Boolean;
  var
    p_DataSize,
    I: Integer;
    p_payllen: Byte;
    p_json   : String;
    p_sndmsg : String;
  begin
// Delphi 6 so needed to create JSON by hand<br>
    p_json := '{"aps":{';
    if (Count > 0) then
    begin
      p_json := p_json + '"alert":"You Have ' + IntToStr(Count);
      if (count = 1) then
        p_json := p_json + ' Reminder'
      else<br>
        p_json := p_json + ' Reminders';
      p_json := p_json + '","sound": "default",';
    end;
    p_json := p_json + '"badge":' + inttostr(Count) + '}}';
    p_payllen := length(p_json);
    // Hard code the first part of message as it never changes
    p_sndmsg :=  chr(0) + chr(0) + chr(32);
    // Convert hex string to binary data 
    p_DataSize := Length(HexData) div 2;
    for I := 0 to p_DataSize-1 do
      p_sndmsg := p_sndmsg + char(Byte(StrToInt('$' + Copy(HexData, (I*2)+1,
        2))));
    //Now need to add length of json string and string itself
    p_sndmsg := p_sndmsg + chr(0) + Char(p_payllen) + p_json;
    try
    // According to Apple can't connect/disconnect for each message so leave open for later
      if (not PushClient.Connected) then
        PushClient.Connect;
      PushClient.IOHandler.Send(p_sndmsg[1], length(p_sndmsg));
    except
      on e : exception do
        Log_Error(e.message);
    end;
  end;
于 2012-08-07T14:52:35.907 回答
2

你可以尝试像 Rogier 所说的那样移植 java/php 或 ruby​​ 代码。同时看看他的http://www.pushwoosh.com/一些类似于http://urbanairship.com/的东西。

于 2012-07-11T06:00:48.673 回答