저장 한 토큰이 앱을 다시 배포 할 때 작동하지 않는 이유를 설명 할 수는 없지만 버전을 변경할 때 왜 작동하지 않는지 설명 할 수 있습니다. 간단히 말해서 토큰은 앱 버전에만 해당됩니다.
먼저, 다른 데이터를 보내거나 메시지 형식을 변경하거나 다른 버전의 메시지를 보내지 않는 응용 프로그램이 버전 경계를 넘어 메시지를 보내지 않도록해야합니다. v2에서 서블릿에 대한 v1 렌더링에서 자바 스크립트 번들을 원하지 않는 것과 같은 방식으로, v1에서 v2 서블릿으로 메시지를 수신하는 자바 스크립트 메시지 핸들러를 원하지 않을 것이다 (또는 그 반대).
그래서, 잘하면 무슨 일이 일어나고 있는지 분명히 만들려면 :
채널은 당신이 createChannel 또는 sendMessage 첨부를 호출 할 때 제공하여 APPID, 앱 버전, 클라이언트 ID의 조합에 의해 확인된다. 채널 API의 구현은 appid/clientid -> token의 매핑을 저장하지 않습니다. 크게 간소화하기 위해이 같은 일을 같은 createChannel 생각할 수 :
public String createChannel(clientid) {
// obviously we don't really just append strings to each other for actual implementation.
return encryptStringSomehow(clientid + globalAppInfo.version + globalAppInfo.appid);
}
및 sendMessage 첨부는 다음과 같이이다 :
public void sendMessage(clientid, message) {
// identify the JID used for this channel.
JID xmppJid = new JID(mutateString(clientid + globalAppInfo.version + globalAppInfo.appid),
CHANNEL_XMPP_DOMAIN); // some domain used for channel messages
// send the <message> stanza to that jid with the application message as the body
xmppService.sendMessage(xmppJid, encodeSomehow(message));
}
및 클라이언트 측에서
이 채널에 대한 책임을 서블릿이 토큰을 해독
sendMessage
기능과 동일한 메소드로 작성된 JID로 식별되는 엔드 포인트에 바인드합니다.
토큰은 토큰이 해당 토큰을 만든 앱의 동일한 버전에서 보낸 메시지에만 유효합니다.
여러 탭에서 동일한 채널을 사용하면 효과가 없습니다. 한 번에 하나의 클라이언트 만 각 채널에 연결해야합니다. –