Ein Pusher -Client -Plugin für Flattern auf Android und iOS. Es wickelt Pusher-Webocket-Java V2.2.5 und Pusher-Websocket-Wift V8.0.0.
Für Tutorials und eingehende Informationen über Pusher-Kanäle finden Sie in den offiziellen Dokumenten.
Dieser Client arbeitet mit offiziellen Pusher-Servern und Laravel Self Hosted Pusher WebSocket Server (Laravel-Websockets).
Fügen Sie zu Ihrem Pubspec.yaml hinzu
dependencies :
pusher_client : ^2.0.0 Stellen Sie das minimale Bereitstellungsziel in der Podfile auf 9.0 ein. Gehen Sie zu ios/Podfile und wenden Sie sich dann diese Zeile an:
# platform :ios, '8.0'
Ändern Sie es in:
platform :ios, '9.0'
Möglicherweise haben Sie ein Problem mit privaten Kanälen, wenn Sie einen lokalen Pusher-Server wie Laravel-Websockets verwenden, um dies zu ios/Runner/Info.plist zu beheben.
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Wenn Sie wissen, welche Domains Sie herstellen werden, um hinzuzufügen:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict > Wenn Sie die Code -Verschleierung mit R8 oder Proguard aktiviert haben, müssen Sie die folgende Regel in android/app/build.gradle hinzufügen. Gradle:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' ), ' proguard-rules.pro '
}
} Dann in android/app/proguard-rules.pro :
- keep class com.github.chinloyal.pusher_client .** { * ; } Hier ist die API auf den Punkt gebracht.
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 ();
Weitere Informationen im Referenzformat finden Sie unten.
Der Konstruktor nimmt eine Anwendungsschlüssel, die Sie im API -Zugriffsabschnitt der App im Dashboard von Pusher Channels erhalten können, und ein Pusher -Optionsobjekt.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); Wenn Sie private, präsent oder verschlüsselte Kanäle verwenden, müssen Sie eine PusherAuth bereitstellen, die bei der Authentifizierung von Abonnements verwendet werden soll. Um dies zu tun, müssen Sie ein PusherOptions -Objekt übergeben, bei dem ein auth -Set festgelegt wurde.
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);Um die Protokollierung und automatische Verbindung zu deaktivieren, tun Sie dies:
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); Wenn die automatische Verbindung deaktiviert ist, können Sie mit connect() in der Pusher -Instanz manuell verbinden.
Der größte Teil der Funktionalität dieses Plugins wird über das PusherOptions -Objekt konfiguriert. Sie konfigurieren es, indem Sie Parameter auf dem Objekt einstellen, bevor Sie es an den Pusher -Client weitergeben. Unten finden Sie eine Tabelle, die alle Eigenschaften enthält, die Sie festlegen können.
| Verfahren | Parameter | Beschreibung |
|---|---|---|
| verschlüsselt | bool | Ob die Verbindung mit TLS hergestellt werden sollte oder nicht. |
| Auth | PushernAauth | Legt die Autorisierungsoptionen fest, die bei der Authentifizierung privater, privatverschlüsselter und Präsenzkanäle verwendet werden sollen. |
| Gastgeber | Saite | Der Host, zu dem Verbindungen hergestellt werden. |
| WSport | int | Der Port, zu dem unverschlüsselte Verbindungen hergestellt werden. Automatisch richtig einstellen. |
| WSSport | int | Der Port, zu dem verschlüsselte Verbindungen hergestellt werden. Automatisch richtig einstellen. |
| Cluster | Saite | Stellt den Cluster fest, zu dem der Client eine Verbindung herstellt und so den Host und den Port korrekt einstellt. |
| Aktivitätszeit | int | Die Anzahl der Millisekunden der Inaktivität, bei denen ein "Ping" zur Überprüfung der Verbindung ausgelöst wird. Der Standardwert beträgt 120.000. |
| Pongimeout | int | Die Anzahl der Millisekunden des Clients wartet darauf, eine "Pong" -Reaktion vom Server zu erhalten, bevor er sich trennen. Der Standardwert beträgt 30.000. |
| MaxReconnectionAttempts | int | Anzahl der Wiederverbindungsversuche, die durchgeführt werden, wenn pusher.connect() aufgerufen wird, nach dem der Kunde aufgibt. |
| MaxReconnectGapinsekunden | int | Die Verzögerung in zwei Wiederverbindungen erstreckt sich exponentiell (1, 2, 4, .. Sekunden). Diese Eigenschaft legt die maximalen Zwischenversuche zwischen zwei Wiederverbindungsversuchen fest. |
Die Verbindung connect() wird auch verwendet, um die Verbindung neu zu verbinden, wenn die Verbindung verloren gegangen ist, beispielsweise wenn ein Gerät den Empfang verliert. Beachten Sie, dass der Status der Kanalabonnements und Ereignisbindungen beim Trennen und erneut mit dem Server erneuert werden, sobald eine Verbindung wiederhergestellt ist.
pusher. disconnect (); Nach der Trennung veröffentlicht die PusherClient -Instanz alle intern zugewiesenen Ressourcen (Threads und Netzwerkverbindungen).
Kanäle verwenden das Konzept der Kanäle, um Daten zu abonnieren. Sie werden mit einem einfachen Namen identifiziert und abonniert. Die Ereignisse sind an einen Kanal gebunden und werden auch namentlich identifiziert.
Wie oben erwähnt, müssen Kanalabonnements nur einmal von der PusherClient -Instanz registriert werden. Sie werden über eine Trennung konserviert und mit dem Server wiederhergestellt. Sie sollten nicht erneut registriert werden. Sie können jedoch vor dem ersten connect mit einer PusherClient -Instanz registriert werden - sie werden mit dem Server abgeschlossen, sobald eine Verbindung verfügbar ist.
Die Standardmethode zum Abonnieren eines Kanals umfasst das Aufrufen der Abonnementmethode Ihres Client -Objekts:
Channel channel = pusher. subscribe ( "my-channel" ); Dies gibt ein Channel zurück, an das Ereignisse gebunden werden können.
Private Kanäle werden genauso erstellt wie öffentliche Kanäle, außer dass sie sich im "privaten" Namespace befinden. Dies bedeutet, den Kanalnamen zu Präfixen:
Channel privateChannel = pusher. subscribe ( "private-status-update" );Das Abonnieren von privaten Kanälen umfasst die Authentifizierung des Kunden. Weitere Informationen finden Sie im Abschnitt "Pusher Constructor" für das authentifizierte Kanalbeispiel.
Ähnlich wie bei privaten Kanälen können Sie auch einen privaten verschlüsselten Kanal abonnieren. Dieses Plugin unterstützt die End-to-End-Verschlüsselung vollständig. Dies bedeutet, dass nur Sie und Ihre vernetzten Kunden Ihre Nachrichten lesen können. Pusher kann sie nicht entschlüsseln. Diese Kanäle müssen mit "privat zerbrechlicher" vorangestellt werden.
Wie bei privaten Kanälen müssen Sie einen Authentifizierungsendpunkt bereitstellen. Dieser Endpunkt muss einen Server-Client verwenden, der die End-to-End-Verschlüsselung unterstützt. Es gibt einen Demonstrationsendpunkt für die Verwendung von NodeJs.
Präsenzkanäle sind Kanäle, deren Namen durch 'Vorhandensein' vorangestellt werden. Präsenzkanäle müssen ebenfalls authentifiziert werden.
Channel presenceChannel = pusher. subscribe ( "presence-another-channel" );Es gibt zwei Arten von Ereignissen, die in Kanalabonnements auftreten.
Channel channel = pusher. subscribe ( "private-orders" );
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
}); Die Rückrufe, die Sie binden, erhalten ein PusherEvent :
| Eigentum | Typ | Beschreibung |
|---|---|---|
eventName | String | Der Name des Ereignisses. |
channelName | String | Der Name des Kanals, auf dem das Ereignis ausgelöst wurde. (Optional) |
data | String | Die Daten, die an trigger übergeben wurden, als Zeichenfolge codiert. Wenn Sie ein Objekt bestanden haben, wurde dies zu einer JSON -Zeichenfolge serialisiert, die Sie bei Bedarf analysieren können. (Optional) |
userId | String | Die ID des Benutzer, der das Ereignis ausgelöst hat. Dies ist nur für Client -Ereignisse verfügbar, die auf Präsenzkanälen ausgelöst werden. (Optional) |
Sie können sich von einer Veranstaltung entbinden, indem Sie:
channel. unbind ( "order-status-updated" );Sobald ein privates oder Präsenzabonnement genehmigt wurde und das Abonnement erfolgreich ist, ist es möglich, Ereignisse auf diesen Kanälen auszulösen.
Ereignisse, die von Kunden ausgelöst werden, werden als Kundenereignisse bezeichnet. Weil sie von einem Kunden ausgelöst werden, dem möglicherweise nicht vertraut wird, gibt es bei der Verwendung eine Reihe von erzwungenen Regeln. Einige dieser Regeln umfassen:
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});Ausführliche Informationen finden Sie in der Dokumentation von Client -Ereignissen.
Sobald Sie verbunden sind, können Sie auf eine eindeutige Kennung für die Verbindung des aktuellen Clients zugreifen. Dies ist als Socket -ID bekannt. Sie können auf den Wert zugreifen, sobald die Verbindung wie folgt hergestellt wurde:
String socketId = pusher. getSocketId ();Weitere Informationen darüber, wie und warum es eine Socket -ID gibt, finden Sie in der Dokumentation zum Authentifizieren von Benutzern und zur Ausnahme von Empfängern.
Die iOS -Protokollierung scheint nicht an Flutter -Konsole ausgegeben zu sein. Wenn Sie die App jedoch von Xcode ausführen, sollten Sie die Protokolle sehen können.
Wenn Sie einen lokalen Pusher -Server verwenden, aber keinen privaten Kanal abonnieren können, fügen Sie dies zu Ihrem iOS/Runner/info.plist hinzu:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Wenn Sie wissen, welche Domains Sie herstellen werden, um hinzuzufügen:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict >