Я пытаюсь отправить push-уведомление APN, используя Erlang.
Это код, который я придумал до сих пор:
-module(apnstest2).
-export([connect/0]).
connect() ->
application:start(ssl),
ssl:seed("someseedstring"),
Address = "gateway.sandbox.push.apple.com",
Port = 2195,
Cert = "/path/to/Certificate.pem",
Key = "/path/to/Key.unenc.pem",
Options = [{certfile, Cert}, {keyfile, Key}, {mode, binary}],
Timeout = 1000,
{ok, Socket} = ssl:connect(Address, Port, Options, Timeout),
Token = "195ec05a962b24954693c0b638b6216579a0d1d74b3e1c6f534c6f8fd0d50d03",
Payload = "{\"aps\":{\"alert\":\"Just testing.\",\"sound\":\"chime\", \"badge\":10}}",
TokenLength = length(Token),
PayloadLength = length(Payload),
Packet = [<<0:8, TokenLength, Token, PayloadLength, Payload>>],
ssl:send(Socket, list_to_binary(Packet)),
ssl:close(Socket).
Код не использует преимущества параллелизма Эрланга, а является всего лишь прототипом. Я только хочу проверить, могу ли я отправить пуш самым простым способом.
Я думаю, проблема в том, что пакет отправляется в APN.
Это двоичный формат push-уведомления:
альтернативный текст http://developer.apple.com/IPhone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Art/aps_provider_binary.jpg
Как мне создать такой пакет в Erlang?
Может кто-нибудь взглянуть на мой код и сказать, где проблема?
Также я использовал приложение SSL Erlang для создания соединения и отправки данных, и я не знаю, является ли это проблемой или пакетом.
Спасибо!