gpt4 book ai didi

erlang - 如何使用 Erlang 发送推送通知?

转载 作者:行者123 更新时间:2023-12-02 09:06:46 27 4
gpt4 key购买 nike

我正在尝试使用 Erlang 向 APN 发送推送通知。这是我到目前为止想到的代码:

-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).

该代码没有利用 Erlang 的并发性,而只是一个原型(prototype)。我只是想测试一下是否可以用最简单的方式发送推送。

我认为问题出在发送到 APN 的数据包中。这是推送通知的二进制格式:

alt text http://developer.apple.com/IPhone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Art/aps_provider_binary.jpg

我应该如何在 Erlang 中创建这样的数据包?有人可以看一下我的代码并告诉我问题出在哪里吗?
我还使用 Erlang 的 SSL 应用程序来创建连接并发送数据,但我不知道这是问题还是数据包。
谢谢!

最佳答案

首先,不需要创建单个二进制文件的列表,然后对其调用list_to_binary/1。您可以只发送二进制文件本身。

此外,请确保字段长度和值符合协议(protocol):

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

现在我们已经走到这一步了,我们将看到 length(Token) 实际上是 64,而不是 32:您忘记将 Token 的十六进制字符串转换为二进制,因此您发送的是 64 字节的十六进制字符串,而不是 32 个二进制字节。

所以...从一开始就将 Payload 设为二进制,并将 Token 设为数字常量,您可以执行如下操作:

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),

感谢Christian感谢您指出此答案之前修订中的一些错误。

关于erlang - 如何使用 Erlang 发送推送通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1757171/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com