2014-03-06 26 views
1

我正在使用pusher java客戶端(pusher-java-client by mdpye)開發一個正在使用推送器進行推送通知的android應用程序。連接到推杆後,我可以成功訂閱存在通道。一旦訂閱了存在通道,當我嘗試訂閱另一個專用通道時,它顯示錯誤:簽名無效:期望的HMAC SHA256十六進制摘要是xxx:YYYY,但得到了xxxxxxxxxxxxx(可能是驗證錯誤)。Pusher Java客戶端:無法一次訂閱狀態頻道以及私人頻道

問題是如果認證有問題,我甚至無法連接到第一個存在信道。那麼,有什麼問題呢?

代碼片段:

authorizer = new HttpAuthorizer(endpointUrl); 
PusherOptions options = new PusherOptions().setEncrypted(true).setAuthorizer(authorizer); 
pusher = new Pusher(pusher_key, options); 
pusher.getConnection().bind(ConnectionState.ALL, this); 
String socketId = pusher.getConnection().getSocketId(); 
String selfJson = authorizer.authorize(PRESENCE_CHANNEL_NAME, socketId); 
presenceChannel = pusher.subscribePresence(PRESENCE_CHANNEL_NAME, presenceEventListener); 
notificationChannel = pusher.subscribePrivate(notificationChannelName, notificationEventListener); 

回答

2

通道相互獨立的授權 - 呼叫到Authorizer用於每種私人或存在訂閱取得,它可能是你的終點返回正確的結果對於一個不正確爲另一個。

請注意,私人頻道和存在頻道之間的授權端點所需的響應存在差異,後者包含有關前者中無效的用戶數據。請參閱http://pusher.com/docs/authenticating_users#implementing_endpoints

+0

即使兩個通道所需的響應不同,它也不應該是個問題,因爲對於存在通道,客戶端庫接受身份驗證令牌(auth簽名)和用戶信息,如同專用通道它會忽略用戶信息並只接受認證令牌。所以,我相信這不應該是一個問題。我得到的錯誤是「無效的驗證簽名」。由於我有一個共同的服務器端代碼來爲兩種類型的通道返回auth響應,因此如何才能獲得正確的身份驗證令牌用於狀態通道並且對於私人通道而言是錯誤的? – sumit

+2

請參閱http://pusher.com/docs/auth_signatures,'user_data'是要簽名的字符串的一部分。具體而言,對於私人頻道,要簽名的字符串爲'',存在'' – mike

+0

如何確保正確的信息基於私有/在線頻道呢? – hipkiss