Um plug -in do cliente do Pusher canais para o Android e o iOS de flerta. Ele envolve o Pusher-Websocket-Java v2.2.5 e o Pusher-Websocket-Swift v8.0.0.
Para tutoriais e informações mais aprofundadas sobre os canais de empurradores, visite os documentos oficiais.
Esse cliente trabalha com servidores oficiais de empurrões e o Websocket Server Host Host Host (Laravel-Websockets).
Adicione ao seu pubSpec.yaml
dependencies :
pusher_client : ^2.0.0 Defina a meta de implantação mínima no PODFILE para 9.0. Vá para ios/Podfile , depois descomemente esta linha:
# platform :ios, '8.0'
Mude para:
platform :ios, '9.0'
Você pode ter um problema assinando canais privados se estiver usando um servidor de empurradores local como o Laravel-Websockets, para corrigir isso, vá para ios/Runner/Info.plist e adicione:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Se você souber quais domínios você se conectará para adicionar:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict > Se você ativou a ofuscação de código com R8 ou ProGuard, precisará adicionar a seguinte regra no android/app/build.gradle :
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' ), ' proguard-rules.pro '
}
} Então no android/app/proguard-rules.pro :
- keep class com.github.chinloyal.pusher_client .** { * ; } Aqui está a API em poucas palavras.
PusherOptions options = PusherOptions (
host : 'example.com' ,
wsPort : 6001 ,
encrypted : false ,
auth : PusherAuth (
'http://example.com/auth' ,
headers : {
'Authorization' : 'Bearer $ token ' ,
},
),
);
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
autoConnect : false
);
// connect at a later time than at instantiation.
pusher. connect ();
pusher. onConnectionStateChange ((state) {
print ( "previousState: ${ state . previousState }, currentState: ${ state . currentState }" );
});
pusher. onConnectionError ((error) {
print ( "error: ${ error . message }" );
});
// Subscribe to a private channel
Channel channel = pusher. subscribe ( "private-orders" );
// Bind to listen for events called "order-status-updated" sent to "private-orders" channel
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
});
// Unsubscribe from channel
pusher. unsubscribe ( "private-orders" );
// Disconnect from pusher service
pusher. disconnect ();
Mais informações no formato de referência podem ser encontradas abaixo.
O construtor pega uma chave de aplicativo que você pode obter da seção ACI de API do aplicativo no painel do Pusher Channels e um objeto Opções de empurradores.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); Se você quiser usar canais privados, presentes ou criptografados, precisará fornecer um PusherAuth para ser usado ao autenticar assinaturas. Para fazer isso, você precisa passar em um objeto PusherOptions que teve um conjunto de auth .
PusherAuth auth = PusherAuth (
// for auth endpoint use full url
'http://example.com/auth' ,
headers : {
'Authorization' : 'Bearer $ token ' ,
},
);
PusherOptions options = PusherOptions (
auth : auth
);
PusherClient pusher = PusherClient ( YOUR_APP_KEY , options);Para desativar o registro e a conexão automática, faça isso:
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); Se o Auto Connect estiver desativado, você poderá conectar manualmente usando connect() na instância do empurrador.
A maior parte da funcionalidade deste plug -in é configurada através do objeto Pusheroptions. Você o configura definindo parâmetros no objeto antes de passá -lo para o cliente Pusher. Abaixo está uma tabela que contém todas as propriedades que você pode definir.
| Método | Parâmetro | Descrição |
|---|---|---|
| criptografado | bool | Se a conexão deve ser feita com TLS ou não. |
| Auth | Pusherauth | Define as opções de autorização a serem usadas ao autenticar canais privados, criptografados privados e presença. |
| hospedar | Corda | O host com o qual as conexões serão feitas. |
| wsport | int | A porta com a qual as conexões não criptografadas serão feitas. Defina automaticamente corretamente. |
| wssport | int | A porta com a qual as conexões criptografadas serão feitas. Defina automaticamente corretamente. |
| conjunto | Corda | Define o cluster ao qual o cliente se conectará, configurando assim o host e a porta corretamente. |
| ActivityTimeout | int | O número de milissegundos de inatividade no qual um "ping" será acionado para verificar a conexão. O valor padrão é de 120.000. |
| PongTimeout | int | O número de milissegundos que o cliente espera para receber uma resposta "pong" do servidor antes de desconectar. O valor padrão é de 30.000. |
| MaxReconnectionAttempts | int | Número de tentativas de reconexão que serão feitas quando pusher.connect() é chamado, após o que o cliente desistirá. |
| MaxReconnectGapInseconds | int | O atraso em duas reconexão se estende exponencialmente (1, 2, 4, .. segundos), essa propriedade define as duas tentativas máximas de reconexão. |
O método connect() também é usado para se reconectar, caso a conexão tenha sido perdida, por exemplo, se um dispositivo perder a recepção. Observe que o estado das assinaturas de canal e as ligações de eventos serão preservadas enquanto desconectadas e renegociadas com o servidor assim que uma conexão for restabelecida.
pusher. disconnect (); Após a desconexão, a instância PusherClient lançará quaisquer recursos alocados internamente (threads e conexões de rede)
Os canais usam o conceito de canais como uma maneira de assinar dados. Eles são identificados e inscritos por um nome simples. Os eventos estão vinculados a um canal e também são identificados pelo nome.
Como mencionado acima, as assinaturas de canal precisam ser registradas apenas uma vez pela instância PusherClient . Eles são preservados na desconexão e restabelecidos com o servidor em Reconectar. Eles não devem ser registrados novamente. Eles podem, no entanto, ser registrados com uma instância PusherClient antes da primeira chamada a connect - eles serão concluídos com o servidor assim que uma conexão estiver disponível.
O método padrão para assinar um canal envolve invocar o método de assinatura do seu objeto cliente:
Channel channel = pusher. subscribe ( "my-channel" ); Isso retorna um objeto Channel , ao qual os eventos podem ser vinculados.
Os canais privados são criados exatamente da mesma maneira que os canais públicos, exceto que eles residem no namespace 'privado' . Isso significa prefixar o nome do canal:
Channel privateChannel = pusher. subscribe ( "private-status-update" );A inscrição em canais privados envolve o cliente sendo autenticado. Consulte a seção do construtor do Pusher para o exemplo de canal autenticado para obter mais informações.
Semelhante aos canais privados, você também pode se inscrever em um canal privado criptografado. Este plug-in suporta totalmente a criptografia de ponta a ponta. Isso significa que somente você e seus clientes conectados poderão ler suas mensagens. Pusher não pode descriptografá -los. Esses canais devem ser prefixados com 'Private-Crypted-'
Como nos canais privados, você deve fornecer um terminal de autenticação. Esse terminal deve estar usando um cliente do servidor que suporta criptografia de ponta a ponta. Existe um terminal de demonstração para analisar o uso do NodeJS.
Os canais de presença são canais cujos nomes são prefixados pela 'presença-' . Os canais de presença também precisam ser autenticados.
Channel presenceChannel = pusher. subscribe ( "presence-another-channel" );Existem dois tipos de eventos que ocorrem nas assinaturas de canais.
Channel channel = pusher. subscribe ( "private-orders" );
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
}); Os retornos de chamada que você liga recebem um PusherEvent :
| Propriedade | Tipo | Descrição |
|---|---|---|
eventName | String | O nome do evento. |
channelName | String | O nome do canal em que o evento foi acionado. (Opcional) |
data | String | Os dados que foram passados para trigger , codificados como uma string. Se você passou por um objeto, isso terá sido serializado para uma string json que você pode analisar conforme necessário. (Opcional) |
userId | String | O ID do usuário que desencadeou o evento. Isso está disponível apenas para eventos do cliente acionados nos canais de presença. (Opcional) |
Você pode se desligar de um evento fazendo:
channel. unbind ( "order-status-updated" );Uma vez autorizado uma assinatura privada ou de presença e a assinatura foi bem -sucedida, é possível desencadear eventos nesses canais.
Os eventos acionados pelos clientes são chamados de eventos do cliente. Porque eles estão sendo desencadeados de um cliente que pode não ser confiável, existem várias regras aplicadas ao usá -las. Algumas dessas regras incluem:
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});Para detalhes completos, consulte a documentação dos eventos do cliente.
Depois de conectado, você pode acessar um identificador exclusivo para a conexão do cliente atual. Isso é conhecido como ID do soquete . Você pode acessar o valor assim que a conexão for estabelecida da seguinte forma:
String socketId = pusher. getSocketId ();Para obter mais informações sobre como e por que há um ID de soquete, consulte a documentação sobre a autenticação de usuários e excluir os destinatários.
O registro do iOS parece não ter saído para o console de vibrar, no entanto, se você executar o aplicativo do Xcode, poderá ver os logs.
Se estiver usando um servidor Pusher local, mas não conseguir se inscrever em um canal privado, adicione -o ao seu iOS/corredor/info.plist:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Se você souber quais domínios você se conectará para adicionar:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict >