Flut 그것은 푸셔 -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'
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 액세스 섹션에서 얻을 수있는 응용 프로그램 키와 푸셔 옵션 객체를 가져옵니다.
PusherClient pusher = PusherClient ( YOUR_APP_KEY , PusherOptions ()); 개인, 존재 또는 암호화 된 채널을 사용하려면 구독을 인증 할 때 사용하려면 PusherAuth 제공해야합니다. 이렇게하려면 auth 세트가있는 PusherOptions 객체를 전달해야합니다.
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);로깅 및 자동 연결을 비활성화하려면 다음을 수행합니다.
PusherClient pusher = PusherClient (
YOUR_APP_KEY ,
options,
enableLogging : false ,
autoConnect : false ,
); Auto Connect가 비활성화되면 Pusher 인스턴스에서 connect() 사용하여 수동으로 연결할 수 있습니다.
이 플러그인의 대부분의 기능은 PusherOptions 객체를 통해 구성됩니다. 푸셔 클라이언트에 전달하기 전에 객체에서 매개 변수를 설정하여 구성합니다. 아래는 설정할 수있는 모든 속성이 포함 된 테이블입니다.
| 방법 | 매개 변수 | 설명 |
|---|---|---|
| 암호화 | 부 | TLS와 연결 해야하는지 여부. |
| 인증 | 강매 | 개인, 개인 암호화 및 존재 채널을 인증 할 때 사용할 권한 옵션을 설정합니다. |
| 주인 | 끈 | 어떤 연결이 이루어질 호스트. |
| wsport | int | 암호화되지 않은 연결이 이루어질 포트. 자동으로 올바르게 설정됩니다. |
| wssport | int | 암호화 된 연결이 이루어질 포트. 자동으로 올바르게 설정됩니다. |
| 무리 | 끈 | 클라이언트가 연결하는 클러스터를 설정하여 호스트와 포트를 올바르게 설정합니다. |
| ActivityTimeout | int | "핑"이 연결되는 밀리 초의 비활성 수는 연결을 확인하기 위해 트리거됩니다. 기본값은 120,000입니다. |
| Pongtimeout | int | 클라이언트가 분리하기 전에 서버로부터 "Pong"응답을 받기 위해 클라이언트가 기다리는 밀리 초. 기본값은 30,000입니다. |
| MaxReconnectionAtMpts | int | pusher.connect() 호출 될 때 이루어질 수있는 재 연결 시도 수는 클라이언트가 포기합니다. |
| MaxReconnectGapinseconds | int | 두 번의 재 연결의 지연은 기하 급수적으로 연장됩니다 (1, 2, 4, .. 초)이 속성은 두 번의 재 연결 시도 사이의 최대를 설정합니다. |
connect() 메소드는 연결이 손실 된 경우, 예를 들어 장치가 수신을 잃는 경우 다시 연결하는 데 사용됩니다. 연결이 다시 설립되면 채널 구독 및 이벤트 바인딩 상태가 서버와 연결이 끊어지고 다시 분석되는 상태에서 보존됩니다.
pusher. disconnect (); 연결을 끊은 후 PusherClient 인스턴스는 내부적으로 할당 된 리소스 (스레드 및 네트워크 연결)를 해제합니다.
채널은 채널의 개념을 데이터를 구독하는 방법으로 사용합니다. 그들은 간단한 이름으로 식별되고 구독됩니다. 이벤트는 채널에 묶여 있으며 이름으로 식별됩니다.
위에서 언급했듯이 채널 구독은 PusherClient 인스턴스에서 한 번만 등록해야합니다. 연결이 끊어지고 다시 연결시 서버와 함께 재설정됩니다. 다시 등록해서는 안됩니다. 그러나 첫 번째 connect 호출 전에 PusherClient 인스턴스에 등록 될 수 있습니다. 연결을 사용할 수있게 되 자마자 서버로 완료됩니다.
채널에 가입하는 기본 메소드는 클라이언트 개체의 구독 메소드를 호출하는 것입니다.
Channel channel = pusher. subscribe ( "my-channel" ); 이것은 이벤트가 바인딩 될 수있는 Channel 객체를 반환합니다.
개인 채널은 '개인' 네임 스페이스에 거주한다는 점을 제외하고는 공개 채널과 동일한 방식으로 생성됩니다. 이것은 채널 이름을 접두사하는 것을 의미합니다.
Channel privateChannel = pusher. subscribe ( "private-status-update" );개인 채널에 가입하려면 클라이언트가 인증되는 것과 관련이 있습니다. 자세한 내용은 인증 된 채널 예제의 푸셔 생성자 섹션을 참조하십시오.
개인 채널과 마찬가지로 개인 암호화 채널을 구독 할 수도 있습니다. 이 플러그인은 엔드 투 엔드 암호화를 완벽하게 지원합니다. 이것은 귀하와 연결된 고객만이 귀하의 메시지를 읽을 수 있음을 의미합니다. 푸셔는 해독 할 수 없습니다. 이 채널은 '개인 암호화-' 로 접두사해야합니다.
개인 채널과 마찬가지로 인증 엔드 포인트를 제공해야합니다. 이 엔드 포인트는 엔드 투 엔드 암호화를 지원하는 서버 클라이언트를 사용해야합니다. nodejs를 사용하는 데 대한 데모 엔드 포인트가 있습니다.
존재 채널은 이름이 'PRESENTER-' 로 이름을 붙인 채널입니다. 존재 채널도 인증해야합니다.
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 | 이벤트를 트리거 한 사용자의 ID. 이것은 존재 채널에서 트리거 된 클라이언트 이벤트에서만 사용할 수 있습니다. (선택 과목) |
다음을 수행하여 이벤트에서 벗어날 수 있습니다.
channel. unbind ( "order-status-updated" );개인 또는 존재 가입이 승인되고 구독이 성공하면 해당 채널에서 이벤트를 트리거 할 수 있습니다.
클라이언트가 유발 한 이벤트를 클라이언트 이벤트라고합니다. 신뢰할 수없는 클라이언트로부터 트리거되고 있기 때문에 사용할 때 강제 규칙이 여러 개 있습니다. 이 규칙 중 일부는 다음과 같습니다.
channel. bind ( "pusher:subscription_succeeded" , ( PusherEvent event) {
channel. trigger ( "client-istyping" , { "name" : "Bob" });
});자세한 내용은 클라이언트 이벤트 문서를 참조하십시오.
연결되면 현재 클라이언트 연결에 대한 고유 식별자에 액세스 할 수 있습니다. 이것을 소켓 ID 라고합니다. 연결이 다음과 같이 설정되면 값에 액세스 할 수 있습니다.
String socketId = pusher. getSocketId ();소켓 ID가 어떻게 그리고 왜 있는지에 대한 자세한 내용은 사용자를 인증하고 수신자를 제외한 문서를 참조하십시오.
iOS 로깅은 Flut
로컬 푸셔 서버를 사용하지만 개인 채널을 구독 할 수없는 경우 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 >