Ios 如何在Delphi中构建Apple推送通知提供程序服务器

Ios 如何在Delphi中构建Apple推送通知提供程序服务器,ios,delphi,push-notification,apple-push-notifications,Ios,Delphi,Push Notification,Apple Push Notifications,我需要在Delphi中构建一个提供者服务器,通过APNS向我的iPhone应用程序发送推送通知消息 我已经读到,这是可以通过印地的组成部分。还需要安装apple提供的SSL证书(.p12) 我正在寻找一些在Delphi中开始使用的指针。 使用什么样的库是好的,有人知道这样做的示例代码吗 以下是示例,您可以尝试移植java/php或ruby代码,正如Rogier所说。我的意思是,看看他的一些类似的东西。好的,我这样处理: 在表单上添加indyTidTCPClient和TidsLioHandlerS

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

我已经读到,这是可以通过印地的组成部分。还需要安装apple提供的SSL证书(.p12)

我正在寻找一些在Delphi中开始使用的指针。 使用什么样的库是好的,有人知道这样做的示例代码吗


以下是示例,您可以尝试移植java/php或ruby代码,正如Rogier所说。我的意思是,看看他的一些类似的东西。

好的,我这样处理:
在表单上添加indy
TidTCPClient
TidsLioHandlerSocket
并链接它们。在
TIdSSLIOHandlerSocket
中设置SSL选项,将
CertFile
KeyFile
设置为相应的.pem文件。将方法设置为
sslv23
,将模式设置为
sslmClient

IOHandler
OnGetPassword
事件中设置密钥密码

有用的URL:

在编码方面:

注意:HexData是从IPhone应用程序发送的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;

函数SendNotification(HexData:String;Count:Integer):布尔值;
变量
p_数据大小,
I:整数;
佩伦:字节;
p_json:String;
p_sndmsg:字符串;
开始
//Delphi 6需要手动创建JSON
p_json:='{“aps”:{'; 如果(计数>0),则 开始 p_json:=p_json+'“警报”:“您有'+IntToStr(计数); 如果(计数=1),则 p_json:=p_json+“提醒” 否则
p_json:=p_json+‘提醒’; p_json:=p_json+',“声音”:“默认值”,'; 结束; p_json:=p_json+'“徽章”:'+inttostr(计数)+'}}'; p_paylen:=长度(p_json); //硬编码消息的第一部分,因为它永远不会更改 p_sndmsg:=chr(0)+chr(0)+chr(32); //将十六进制字符串转换为二进制数据 p_数据大小:=长度(HexData)div 2; 对于I:=0到p_DataSize-1 do p_sndmsg:=p_sndmsg+char, 2)))); //现在需要添加json字符串的长度和字符串本身 p_sndmsg:=p_sndmsg+chr(0)+Char(p_paylen)+p_json; 尝试 //根据苹果公司的说法,不能为每条信息连接/断开连接,所以请留待以后再打开 如果(未连接PushClient.Connected),则 PushClient.Connect; 发送(p_sndmsg[1],长度(p_sndmsg)); 除了 关于e:exception-do 日志错误(e.message); 结束; 结束;
为什么不移植java/php或ruby代码?我用delphi有一段时间了?另一个问题是delphi是客户端应用程序吗?在这种情况下,为什么不使用运行php的中央服务器,用一些查询参数调用URL,然后让php将消息推送到APN呢。您还需要跟踪取消订阅提要(您希望每天在cron中运行一次),您是否考虑过使用优秀的推送通知提供商Urban Airship。如果您需要的推送数量相当有限,我建议您查看一下,我无法实现这一点,即使我在开始时使用扩展消息语法(1+标识符+超时+0+32),APNS服务器也不会返回任何内容。如何调试它?Indy10不再有Send方法。此外,有时使hexstring二进制的算法会在几个字节内失败,无法正确重建。我让它正常工作,问题是您正在字符串中构建二进制缓冲区,而一些字节无法工作,它们会映射到3F(文本“?”),它必须构建在具有原始字节的TBytes或TMemoryStream中。