Ios 如何在Delphi中构建Apple推送通知提供程序服务器
我需要在Delphi中构建一个提供者服务器,通过APNS向我的iPhone应用程序发送推送通知消息 我已经读到,这是可以通过印地的组成部分。还需要安装apple提供的SSL证书(.p12) 我正在寻找一些在Delphi中开始使用的指针。 使用什么样的库是好的,有人知道这样做的示例代码吗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
以下是示例,您可以尝试移植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中。