anchor.diff:                           , apple_port := inet:port_number()
                            , certfile   => path()
                            , keyfile    => path()
  +                         , timeout    => integer()
                            , type       := type()
                            }.
   
  
positive.code:   {ok, Port} = application:get_env(apns, apple_port),
    {ok, Certfile} = application:get_env(apns, certfile),
    {ok, Keyfile} = application:get_env(apns, keyfile),
  
    #{ name       => ConnectionName
     , apple_host => Host
     , apple_port => Port
     , certfile   => Certfile
     , keyfile    => Keyfile
     , type       => cert
    };
  default_connection(token, ConnectionName) ->
    {ok, Host} = application:get_env(apns, apple_host),
    {ok, Port} = application:get_env(apns, apple_port),
  
    #{ name       => ConnectionName
     , apple_host => Host
     , apple_port => Port
     , type       => token
    }.
  
  
negative.code: add_authorization_header(Headers, Token) ->
    Headers#{apns_auth_token => <<"bearer ", Token/binary>>}.
  
  -spec push(pid(), apns:device_id(), apns:headers(), notification(), integer()) ->
    apns:response().
  push(GunConn, DeviceId, HeadersMap, Notification, Timeout) ->
    Headers = get_headers(HeadersMap),
    Path = get_device_path(DeviceId),
    StreamRef = gun:post(GunConn, Path, Headers, Notification),
  