Плагин клиента толкает клиент для Flutter, нацеленного на Android и iOS. Он завершает Pusher-Websocket-Java v2.2.5 и Pusher-Websocket-Swift V8.0.0.
Для учебных пособий и более подробной информации о каналах толкателей посетите официальные документы.
Этот клиент работает с официальными толкательными серверами и Laravel Self-Hosted Pusher WebSocket Server (Laravel-Websockets).
Добавьте в свой pubspec.yaml
dependencies :
pusher_client : ^2.0.0 Установите минимальную цель развертывания в Podfile на 9,0. Перейдите в ios/Podfile , затем понаправляйтесь этой линией:
# platform :ios, '8.0'
Изменить это на:
platform :ios, '9.0'
У вас может быть проблема, подписывающаяся на частные каналы, если вы используете локальный сервер Pusher, такой как Laravel-Websockets, чтобы исправить его, перейдите в ios/Runner/Info.plist и добавьте:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Если вы знаете, какие домены вы подключитесь к добавлению:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict > Если вы включили запутывание кода с помощью R8 или Proguard, вам необходимо добавить следующее правило в android/app/build.gradle :
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile( ' proguard-android.txt ' ), ' proguard-rules.pro '
}
} Затем в android/app/proguard-rules.pro :
- keep class com.github.chinloyal.pusher_client .** { * ; } Вот API в двух словах.
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 ();
Более подробную информацию в справочном формате можно найти ниже.
Конструктор берет клавишу приложения, который вы можете получить из раздела API API API на приборной панели каналов Pusher, и объект параметров толкателя.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); Если вы собираетесь использовать частные, присутствие или зашифрованные каналы, вам нужно будет предоставить PusherAuth для использования при аутентификации подписок. Для этого вам нужно пройти в объекте PusherOptions , у которого был набор 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);Чтобы отключить ведение журнала и Auto Connect, сделайте это:
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); Если Auto Connect отключен, вы можете вручную подключиться с помощью connect() в экземпляре Pusher.
Большая часть функциональности этого плагина настроена через объект Pusheroptions. Вы настраиваете его, устанавливая параметры на объекте, прежде чем передавать его клиенту. Ниже приведена таблица, содержащая все свойства, которые вы можете установить.
| Метод | Параметр | Описание |
|---|---|---|
| зашифровано | буль | Следует ли соединяться с TLS или нет. |
| аут | Pusherauth | Устанавливает параметры авторизации, которые будут использоваться при аутентификации частных, частных каналов и присутствия. |
| хозяин | Нить | Хозяин, на который будут созданы соединения. |
| WSPORT | инт | Порт, которому будут сделаны незашифрованные соединения. Автоматически устанавливается правильно. |
| WSSPORT | инт | Порт, которому будут сделаны зашифрованные соединения. Автоматически устанавливается правильно. |
| кластер | Нить | Устанавливает кластер, к которому клиент подключится, тем самым устанавливая хост и порт правильно. |
| ActivityTimeout | инт | Количество миллисекундов бездействия, при которой «пинг» будет запускается для проверки соединения. Значение по умолчанию составляет 120 000. |
| Pongtimeout | инт | Количество миллисекундов, которое клиент ждет, чтобы получить ответ «pong» от сервера перед отключением. Значение по умолчанию составляет 30 000. |
| maxreconnectionattempts | инт | Количество попыток повторного соединения, которые будут предприняты при вызове pusher.connect() , после чего клиент отказатся. |
| maxreconnectgapinseconds | инт | Задержка в двух переподключении продлевается в геометрической прогрессии (1, 2, 4, .. секунд) Это свойство устанавливает максимальную между двумя попытками повторного соединения. |
Метод connect() также используется для повторного подключения в случае потерянности соединения, например, если устройство теряет прием. Обратите внимание, что состояние подписки на каналы и привязки событий будут сохранены при отключении и переосмысленном с сервером после восстановления соединения.
pusher. disconnect (); После отключения экземпляр PusherClient выпустит любые внутренние распределенные ресурсы (потоки и сетевые соединения)
Каналы используют концепцию каналов в качестве способа подписки на данные. Они идентифицированы и подписаны на простое имя. События связаны с каналом и также идентифицируются по имени.
Как упомянуто выше, подписки на каналы должны быть зарегистрированы только один раз экземпляром PusherClient . Они сохраняются через разъединение и восстанавливаются с сервером при переподключении. Они не должны быть перерегистрированы. Однако они могут быть зарегистрированы в экземпляре PusherClient до первого вызова для connect - они будут завершены с сервером, как только станет доступным соединением.
Метод по умолчанию для подписки на канал включает в себя вызов метода подписки вашего клиентского объекта:
Channel channel = pusher. subscribe ( "my-channel" ); Это возвращает объект Channel , с которым могут быть связаны события.
Частные каналы создаются точно так же, как и публичные каналы, за исключением того, что они находятся в «частном пространстве имен» . Это означает префикс имени канала:
Channel privateChannel = pusher. subscribe ( "private-status-update" );Подписка на частные каналы включает в себя аутентификацию клиента. См. Раздел Pusher Constructor для примера аутентифицированного канала для получения дополнительной информации.
Подобно частным каналам, вы также можете подписаться на частный зашифрованный канал. Этот плагин полностью поддерживает сквозное шифрование. Это означает, что только вы и ваши подключенные клиенты смогут читать ваши сообщения. Толкатель не может расшифровать их. Эти каналы должны быть предварительно профиксированы с «частной зашифрованной».
Как и в случае частных каналов, вы должны предоставить конечную точку аутентификации. Эта конечная точка должна использовать серверный клиент, который поддерживает сквозное шифрование. Существует демонстрационная конечная точка, чтобы посмотреть на использование Nodejs.
Каналы присутствия-это каналы, чьи имена префикс с помощью «присутствия» . Каналы присутствия также должны быть аутентифицированы.
Channel presenceChannel = pusher. subscribe ( "presence-another-channel" );Существует два типа событий, которые происходят в подписке на канала.
Channel channel = pusher. subscribe ( "private-orders" );
channel. bind ( "order-status-updated" , ( PusherEvent event) {
print (event.data);
}); Обратные вызовы, которые вы связываете, получают PusherEvent :
| Свойство | Тип | Описание |
|---|---|---|
eventName | String | Название события. |
channelName | String | Название канала, на котором было вызвано событие. (Необязательный) |
data | String | Данные, которые были переданы, trigger , закодированы как строка. Если вы передали объект, это будет сериализовано на строку JSON, которую вы можете проанализировать по мере необходимости. (Необязательный) |
userId | String | Идентификатор пользователя, который вызвал событие. Это доступно только для клиентских событий, запускаемых по каналам присутствия. (Необязательный) |
Вы можете раскрыться от события, выполнив:
channel. unbind ( "order-status-updated" );После того, как подписка на частное или присутствие была разрешена, и подписка была успешной, можно запустить события на этих каналах.
События, вызванные клиентами, называются клиентскими событиями. Поскольку они запускаются от клиента, которому нельзя доверять, при их использовании существует ряд принудительных правил. Некоторые из этих правил включают в себя:
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});Для получения полной информации см. Документацию о событиях клиентов.
После подключения вы можете получить доступ к уникальному идентификатору для подключения текущего клиента. Это известно как идентификатор сокета . Вы можете получить доступ к значению, как только соединение будет установлено следующим образом:
String socketId = pusher. getSocketId ();Для получения дополнительной информации о том, как и почему есть идентификатор сокета, см. Документацию по аутентификации пользователей и исключая получателей.
Ведение журнала iOS, кажется, не выводит, чтобы развевать консоли, однако, если вы запустите приложение из XCode, вы сможете увидеть журналы.
Если использовать локальный сервер Pusher, но не сможет подписаться на частный канал, добавьте это в свой iOS/Runner/Info.plist:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSAllowsArbitraryLoads</ key >
< true />
</ dict >Если вы знаете, какие домены вы подключитесь к добавлению:
< key >NSAppTransportSecurity</ key >
< dict >
< key >NSExceptionDomains</ key >
< dict >
< key >example.com</ key >
< dict >
< key >NSExceptionAllowsInsecureHTTPLoads</ key >
< true />
< key >NSIncludesSubdomains</ key >
< true />
</ dict >
</ dict >
</ dict >