来自PL SQL的Apple推送通知

时间:2015-05-13 09:46:11

标签: ios ssl plsql oracle11g apple-push-notifications

我看过这个答案: PLSQL APPLE push notifiactions

但我不能使用Java。 我相信应该有一种方法可以从PL / SQL联系APNS,因为我已经使用PL / SQL实现了GCM(Android通知)。

如何设置证书: 我有一个pem文件,其中包含Apple推送证书和私钥。 我也有委托的根证书。我使用orapki将它们添加到钱包中。

我不擅长PL / SQL,因此我的代码可能存在一些问题:



v_url VARCHAR2(200) := 'https://gateway.push.apple.com:2195'; -- APNS url
v_request_body        RAW(32767);

  -- payload prep
  v_token := '01234567890123456789012345678922';
  v_data := '{ "aps" : { "alert" : "This is the alert text", "badge" : 1, "sound" : "default" }';
  v_data_length := length(v_data);
  
  v_request_body := UTL_RAW.cast_to_raw(0)||
                    UTL_RAW.cast_to_raw(0)||
                    UTL_RAW.cast_to_raw(32)||
                    UTL_RAW.cast_to_raw(v_token)||
                    UTL_RAW.cast_to_raw(0)||
                    UTL_RAW.cast_to_raw(v_data_length)||
                    UTL_RAW.cast_to_raw(v_data);
                    
  v_request_length := UTL_RAW.length(r => v_request_body);
  
  -- request starts here
  UTL_HTTP.set_wallet(path => 'file:/path/wallet', password => 'walletPass');  
  req := UTL_HTTP.BEGIN_REQUEST(url => v_url, method => 'POST');
  UTL_HTTP.SET_HEADER(r     => req,
                      name  => 'Content-Type',
                      value => 'application/octet-stream');
  UTL_HTTP.SET_HEADER(r     => req,
                      name  => 'Content-Length',
                      value => v_request_length);

--  UTL_HTTP.WRITE_TEXT(r => req, data => v_request_body);
  utl_http.write_raw(r => req, data => v_request_body);

  resp := UTL_HTTP.GET_RESPONSE(req);




任何建议都将不胜感激!

运行后的上述代码返回此错误:致命SSL错误

与此帖类似:ORA-28860: Fatal SSL error when using UTL_HTTP?

该帖子答案的作者说:

  

最近还有一个针对11.2.0.4注册的错误20323753,仍然没有修复。

这就是我的版本,但我仍然认为这不是问题所在。 我可能会遗漏一些关于APNS或PL / SQL的重要信息

感谢。

1 个答案:

答案 0 :(得分:0)

Zhandos,你有没有让它上班? 您是否尝试过通过沙箱推送消息? gateway.sandbox.push.apple.com

此外,我不确定在这里使用UTL_HTTP是否正确,因为这不是HTTP服务? 我正在尝试使用UTL_TCP实现相同的功能,尽管我还有其他问题需要将证书设置正确:

declare
  l_tcp_conn utl_tcp.connection;
  l_returnvalue     number;
begin

  -- open connection
  l_tcp_conn  := utl_tcp.open_connection('gateway.sandbox.push.apple.com', 2195, charset     => 'US7ASCII');

  -- secure the connection
  UTL_TCP.SECURE_CONNECTION(l_tcp_conn);

  -- write to TCP stream
  l_returnvalue := utl_tcp.write_line(l_tcp_conn, 'payload goes here');
  

end;

希望这有帮助!

感谢。