How to send a push notification using Erlang?

前端 未结 3 632
离开以前
离开以前 2021-01-30 11:25

I\'m trying to send a push notification to APNs using Erlang. This is the code I came up with so far:

-module(apnstest2).
-export([connect/0]).

connect() ->
         


        
3条回答
  •  礼貌的吻别
    2021-01-30 12:01

    To start with, there is no need for creating a list of a single binary and then calling list_to_binary/1 on it. You can just send the binary itself.

    Also, make sure the field lengths and values are appropriate according to the protocol:

    TokenLength = 32 = length(Token),
    Packet = <<0:8, TokenLength:16/big, Token, PayloadLength:16/big, Payload>>,
    ssl:send(Socket, Packet),
    

    Now that we have gotten this far, we will see that length(Token) is in fact 64, not 32: You forgot to convert the hex string for Token to a binary, so you are sending a 64 byte hex character string instead of 32 binary bytes.

    So... making Payload a binary from the start, and making Token a numeric constant, you can do something like the following:

    Payload = <<"{\"aps\":{\"alert\":\"Just testing.\",\"sound\":\"chime\", \"badge\":10}}">>,
    PayloadLength = size(Payload),
    Packet = <<0:8, 32:16/big,
              16#195ec05a962b24954693c0b638b6216579a0d1d74b3e1c6f534c6f8fd0d50d03:256/big,
              PayloadLength:16/big, Payload/binary>>,
    ssl:send(Socket, Packet),
    

    Thanks to Christian for pointing out a number of mistakes in the former revisions of this answer.

提交回复
热议问题