[Erlang 0106] Erlang实现Apple Push Notifications消息推送
- Provider,APNs,Device 这三者之间的信任关系是怎么建立?
- 如何标识消息是给哪台机器的哪个应用的?消息传递的协议是怎么设计的(如何承载要发送的消息)?
- 在Device离线的情况下,Provider提交N条要发送给该Device的消息到APNs,APNs如何处理?
- 对于一些极端情况:比如Device做了系统恢复,应用卸载,Device硬件损坏,APNs有哪些应对机制?
BinToken/binary,
PayloadLength:16/big,
BinPayload/binary>>]
|
1
2
3
4
5
6
7
8
9
10
11
|
bin_to_hexstr(Bin) ->
lists:flatten([io_lib:format(
"~2.16.0B"
, [X]) ||
X <- binary_to_list(Bin)]).
hexstr_to_bin(S) ->
hexstr_to_bin(S, []).
hexstr_to_bin([], Acc) ->
list_to_binary(lists:reverse(Acc));
hexstr_to_bin([X,Y|T], Acc) ->
{ok, [V], []} = io_lib:fread(
"~16u"
, [X,Y]),
hexstr_to_bin(T, [V | Acc]).
|
开源项目APNS4erl
#!/bin/sh # Usage: # test_certs {cert_file} {private_key_file} # Example: # test_certs aps_developer_indetity.cer aps_developer_identity.p12 mkdir -p priv/temp openssl pkcs12 -in "$2" -out priv/temp/key-enc.pem openssl rsa -in priv/temp/key-enc.pem -out priv/temp/key.pem openssl x509 -inform der -in "$1" -out priv/temp/cert.pem cat priv/temp/cert.pem priv/temp/key.pem > priv/cert.pem rm -rf priv/temp make test
-module(t). -compile(export_all). -define(APNS_NAME,app_apns). -include("apns.hrl"). -include("localized.hrl"). conn_apns() -> ssl:start(), apns:start(), apns:connect( ?APNS_NAME, fun handle_apns_error/2, fun handle_apns_delete_subscription/1 ). send_message()-> apns:send_message(?APNS_NAME, "devicetoken31d1df3a324bb72c1ff2bcb3b87d33fd1a2b7578b359fb5494eff", "hello,这是一号话务员"). send_message(Msg) -> apns:send_message(my_connection_name, #apns_msg{ alert = Msg , badge = 5, sound = "beep.wav" , expiry = 1348000749, device_token = "devicetoken31d1df3a324bb72c1ff2bcb3b87d33fd1a2b7578b359fb5494eff" }). send_badge(Number)-> apns:send_badge(qiaoqiao_apns,"devicetoken31d1df3a324bb72c1ff2bcb3b87d33fd1a2b7578b359fb5494eff", Number). handle_apns_error(MsgId, Status) -> error_logger:error_msg("error: ~p - ~p~n", [MsgId, Status]). handle_apns_delete_subscription(Data) -> error_logger:info_msg("delete subscription: ~p~n", [Data]).
http://www.raywenderlich.com/zh-hans/24732
