anchor.diff:  add_authorization_header(Headers, Token) ->
     Headers#{apns_auth_token => <<"bearer ", Token/binary>>}.
   
  --spec push(pid(), apns:device_id(), apns:headers(), notification()) ->
  +-spec push(pid(), apns:device_id(), apns:headers(), notification(), integer()) ->
     apns:response().
  -push(GunConn, DeviceId, HeadersMap, Notification) ->
  -  {ok, Timeout} = application:get_env(apns, timeout),
  +push(GunConn, DeviceId, HeadersMap, Notification, Timeout) ->
     Headers = get_headers(HeadersMap),
     Path = get_device_path(DeviceId),
     StreamRef = gun:post(GunConn, Path, Headers, Notification),
  
positive.code:       {ok, _} = timer:send_after(Sleep, reconnect),
        {noreply, State#{backoff => Backoff + 1}}
    end;
  handle_info(timeout, #{gun_connection := GunConn, client := Client} = State) ->
    {ok, Timeout} = application:get_env(apns, timeout),
    case gun:await_up(GunConn, Timeout) of
      {ok, http2} ->
        Client ! {connection_up, self()},
  
negative.code: handle_call( {push_notification, DeviceId, Notification, Headers}
             , _From
             , State) ->
    #{connection := Connection, gun_connection := GunConn} = State,
    Timeout = maps:get(timeout, Connection),
    Response = push(GunConn, DeviceId, Headers, Notification, Timeout),
    {reply, Response, State};
  handle_call( {push_notification, Token, DeviceId, Notification, HeadersMap}
             , _From
             , State) ->
    #{connection := Connection, gun_connection := GunConn} = State,
    Timeout = maps:get(timeout, Connection),
    Headers = add_authorization_header(HeadersMap, Token),
    Response = push(GunConn, DeviceId, Headers, Notification, Timeout),
    {reply, Response, State};
  handle_call(_Request, _From, State) ->
    {reply, ok, State}.
  