我看过这个答案: 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的重要信息
感谢。
答案 0 :(得分:0)
此外,我不确定在这里使用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;
希望这有帮助!
感谢。