Un Pusher Channels Plugin Client pour Flutter Cibler Android et iOS. Il enveloppe Pusher-Websocket-Java V2.2.5 et Pusher-WebSocket-Swift V8.0.0.
Pour des tutoriels et des informations plus approfondies sur les canaux Pusher, visitez les documents officiels.
Ce client travaille avec les serveurs de poussoir officiels et le serveur WebSocket auto-hébergé Laravel (Laravel-websockts).
Ajouter à votre pubSpec.yaml
dependencies :
pusher_client : ^2.0.0 Réglez la cible de déploiement minimum dans le podfile sur 9.0. Allez sur ios/Podfile , puis décommentez cette ligne:
# platform :ios, '8.0'
Changez-le en:
platform :ios, '9.0'
Vous pouvez avoir un problème à vous abonner aux canaux privés si vous utilisez un serveur de poussoir local comme Laravel-websockts, pour résoudre ce problème, allez à ios/Runner/Info.plist et ajouter:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Si vous savez quels domaines vous vous connectez pour ajouter:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict > Si vous avez activé l'obscuscation du code avec R8 ou Proguard, vous devez ajouter la règle suivante dans android/app/build.gradle :
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' ), ' proguard-rules.pro '
}
} Ensuite, dans android/app/proguard-rules.pro :
- keep class com.github.chinloyal.pusher_client .** { * ; } Voici l'API en un mot.
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 ();
Plus d'informations dans le format de référence peuvent être trouvées ci-dessous.
Le constructeur prend une clé d'application que vous pouvez obtenir à partir de la section d'accès API de l'application dans le tableau de bord des canaux Pusher et un objet Options Pusher.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); Si vous allez utiliser des canaux privés, de présence ou cryptés, vous devrez fournir un PusherAuth pour être utilisé lors de l'authentification des abonnements. Pour ce faire, vous devez passer dans un objet PusherOptions qui a eu un ensemble 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);Pour désactiver la journalisation et la connexion automatique, faites ceci:
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); Si Auto Connect est désactivé, vous pouvez vous connecter manuellement à l'aide de connect() sur l'instance du poussoir.
La plupart des fonctionnalités de ce plugin sont configurées via l'objet PusherOptions. Vous le configurez en définissant des paramètres sur l'objet avant de le passer au client Pusher. Vous trouverez ci-dessous un tableau contenant toutes les propriétés que vous pouvez définir.
| Méthode | Paramètre | Description |
|---|---|---|
| crypté | bool | Si la connexion doit être établie avec TLS ou non. |
| authentification | Pusherauth | Définit les options d'autorisation à utiliser lors de l'authentification des canaux privés, cryptés privés et de présence. |
| hôte | Chaîne | L'hôte à laquelle les connexions seront établies. |
| wsport | int | Le port auquel des connexions non cryptées seront établies. Définir automatiquement correctement. |
| wssport | int | Le port auquel des connexions cryptées seront établies. Définir automatiquement correctement. |
| grappe | Chaîne | Définit le cluster auquel le client se connectera, réglant ainsi correctement l'hôte et le port. |
| ActivityTimeout | int | Le nombre de millisecondes d'inactivité où un "ping" sera déclenché pour vérifier la connexion. La valeur par défaut est de 120 000. |
| pongtimeout | int | Le nombre de millisecondes que le client attend pour recevoir une réponse "pong" du serveur avant de se déconnecter. La valeur par défaut est de 30 000. |
| maxreconnectionattempts | int | Nombre de tentatives de reconnexion qui seront faites lorsque pusher.connect() est appelé, après quoi le client abandonnera. |
| MaxReconnectGapinCondes | int | Le retard en deux reconnexion s'étend de façon exponentielle (1, 2, 4, .. secondes) Cette propriété définit le maximum entre deux tentatives de reconnexion. |
La méthode connect() est également utilisée pour se reconnecter au cas où la connexion aurait été perdue, par exemple si un appareil perd la réception. Notez que l'état des abonnements de canaux et des liaisons d'événements sera préservé lorsqu'il sera déconnecté et reconstitué avec le serveur une fois la connexion rétablie.
pusher. disconnect (); Après la déconnexion, l'instance PusherClient publiera toutes les ressources allouées en interne (threads et connexions réseau)
Les canaux utilisent le concept des canaux comme moyen de s'abonner aux données. Ils sont identifiés et abonnés par un nom simple. Les événements sont liés à un canal et sont également identifiés par nom.
Comme mentionné ci-dessus, les abonnements à canal ne doivent être enregistrés qu'une seule fois par l'instance PusherClient . Ils sont conservés sur la déconnexion et rétablis avec le serveur sur reconnecter. Ils ne doivent pas être réenregistrés. Ils peuvent cependant être enregistrés avec une instance PusherClient avant le premier appel à connect - ils seront terminés avec le serveur dès qu'une connexion sera disponible.
La méthode par défaut pour s'abonner à un canal consiste à invoquer la méthode d'abonnement de votre objet client:
Channel channel = pusher. subscribe ( "my-channel" ); Cela renvoie un objet Channel , auxquels les événements peuvent être liés.
Les canaux privés sont créés exactement de la même manière que les canaux publics, sauf qu'ils résident dans l'espace de noms «privé» . Cela signifie préfixer le nom du canal:
Channel privateChannel = pusher. subscribe ( "private-status-update" );L'abonnement aux canaux privés implique que le client est authentifié. Voir la section Pusher Constructor pour l'exemple de canal authentifié pour plus d'informations.
Semblable aux canaux privés, vous pouvez également vous abonner à un canal crypté privé. Ce plugin prend en charge entièrement le cryptage de bout en bout. Cela signifie que seuls vous et vos clients connectés pourrez lire vos messages. Le poussoir ne peut pas les décrypter. Ces canaux doivent être préfixés par «crypté privé» »
Comme avec les canaux privés, vous devez fournir un point de terminaison d'authentification. Ce point de terminaison doit utiliser un client de serveur qui prend en charge le cryptage de bout en bout. Il y a un point de terminaison de démonstration à examiner l'utilisation de NodeJS.
Les canaux de présence sont des canaux dont les noms sont préfixés par «présence» . Les canaux de présence doivent également être authentifiés.
Channel presenceChannel = pusher. subscribe ( "presence-another-channel" );Il existe deux types d'événements qui se produisent sur les abonnements de canaux.
Channel channel = pusher. subscribe ( "private-orders" );
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
}); Les rappels que vous liez reçoivent un PusherEvent :
| Propriété | Taper | Description |
|---|---|---|
eventName | String | Le nom de l'événement. |
channelName | String | Le nom de la chaîne sur laquelle l'événement a été déclenché. (Facultatif) |
data | String | Les données qui ont été transmises pour trigger , codées sous forme de chaîne. Si vous avez passé un objet, cela aura été sérialisé en une chaîne JSON que vous pouvez analyser si nécessaire. (Facultatif) |
userId | String | L'ID de l'utilisateur qui a déclenché l'événement. Ceci est disponible uniquement pour les événements clients déclenchés sur les canaux de présence. (Facultatif) |
Vous pouvez dévider à partir d'un événement en faisant:
channel. unbind ( "order-status-updated" );Une fois qu'un abonnement privé ou de présence a été autorisé et que l'abonnement a réussi, il est possible de déclencher des événements sur ces canaux.
Les événements déclenchés par les clients sont appelés événements clients. Parce qu'ils sont déclenchés à partir d'un client à qui on ne peut pas faire confiance, il existe un certain nombre de règles forcées lors de leur utilisation. Certaines de ces règles comprennent:
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});Pour plus de détails, consultez la documentation des événements du client.
Une fois connecté, vous pouvez accéder à un identifiant unique pour la connexion actuelle du client. Ceci est connu sous le nom d'ID de socket . Vous pouvez accéder à la valeur une fois la connexion établie comme suit:
String socketId = pusher. getSocketId ();Pour plus d'informations sur la façon et pourquoi il y a un ID de socket, consultez la documentation sur l'authentification des utilisateurs et l'exclusion des destinataires.
La journalisation iOS ne semble pas sortir de la console Flutter, mais si vous exécutez l'application à partir de Xcode, vous devriez pouvoir voir les journaux.
Si vous utilisez un serveur de poussoir local mais que vous ne pouvez pas vous abonner à un canal privé, ajoutez-le à votre iOS / Runner / info.plist:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Si vous savez quels domaines vous vous connectez pour ajouter:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict >