android - Android 实现的推送器

标签 android pusher

我正在尝试在我的 Android 应用程序中实现推送服务,无法访问服务器,只能从 iOS 应用程序之前的实现中复制。连接过程中一切正常,但是当订阅私有(private) channel 时,身份验证失败:

"com.pusher.client.AuthorizationFailureException: java.io.FileNotFoundException: https://authorization_url"

实现是这样的:

    HttpAuthorizer authorizer = new HttpAuthorizer(PUSHER_AUTH_URL);
    PusherOptions options = new PusherOptions().setEncrypted(true).setWssPort(443).setAuthorizer(authorizer);
    pusher = new Pusher(PUSHER_KEY, options);
    pusher.connect(new com.pusher.client.connection.ConnectionEventListener() {
                    @Override
                    public void onConnectionStateChange(ConnectionStateChange change) {

                        if (change.getCurrentState() == ConnectionState.CONNECTED) {
                            Channel channel = pusher.subscribePrivate(PUSH_CHANNEL, new PrivateChannelEventListener() {
                                @Override
                                public void onAuthenticationFailure(String s, Exception e) {
                                    Log.w("PUSHER", "Channel subscription authorization failed");
                                }

                                @Override
                                public void onSubscriptionSucceeded(String s) {
                                    Log.w("PUSHER", "Channel subscription authorization succeeded");
                                }

                                @Override
                                public void onEvent(String s, String s2, String s3) {
                                    Log.w("PUSHER", "An event with name " + s2 + " was delivered!!");
                                }
                            }, "my-event");
                        }
                    }

                    @Override
                    public void onError(String message, String code, Exception e) {
                        Log.w("PUSHER", "There was a problem connecting with code " + code + " and message " + message);
                    }
                }, ConnectionState.ALL);

更新

我确定问题出在身份验证上,在 iOS 版本中有一个函数调用将一些 header 设置为 channel 订阅或类似的东西:

(void)pusher:(PTPusher *)pusher willAuthorizeChannel:(PTPusherChannel *)channel withRequest:(NSMutableURLRequest *)request;
{
    [request addAuthorizationHeadersForUser:self.credentials.user];

}

我试图找出在 android 中添加 header 的位置,尝试将其添加到授权方但没有任何变化:

authorizer.setHeaders(addMapAuthorizationHeaders());

知道在 Android 中与 iOS 功能等效的是什么:willAuthorizeChannel?

最佳答案

好的,这就是我的想法,HttpAuthorizer 需要一组 header ,您可以在创建它时直接设置这些 header ,例如:

HttpAuthorizer authorizer = new HttpAuthorizer(PUSHER_AUTH_URL);
authorizer.setHeaders(MY_AUTH_HEADERS); //a HashMap with the headers
PusherOptions options = new PusherOptions().setEncrypted(true).setWssPort(443).setAuthorizer(authorizer);
pusher = new Pusher(PUSHER_KEY, options);

如果有人有类似的问题,那可以正常工作。

编辑: 这是设置授权 header 的方法。例如,它是一个设置为“键”“值”对的映射:

public static HashMap<String, String> getMapAuthorizationHeaders() {
    try {
        HashMap<String, String> authHeader = new HashMap<>();
        authHeader.put("HeaderKey1", "HeaderValue1");
        authHeader.put("HeaderKey2", "HeaderValue2");
        return authHeader;

    } catch (Exception e) {
        return null;
    }
}

因此推送器配置如下:

authorizer.setHeaders(getMapAuthorizationHeaders());

关于android - Android 实现的推送器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369483/

相关文章:

Android Espresso 不等待 UI 完成

java - 流图像中的空读取?无法启动 Activity ComponentInfo

android - 将 android framebuffer 传输到其他设备

php - 使用推送器将所有消息保存在我的服务器上

dart - 缺少 Pusher ChatKit Api 的 HTTPS header

ruby-on-rails - 在 Rails 中实现 Pusher 聊天

android - 启用 Wifi 和移动数据时 android 操作系统的行为

android - TextView的onDraw支持图形绘制吗?

android - 应用程序关闭或手机关闭时,是否可以在 Android/iOS 应用程序上接收 Pusher 消息

laravel - Pusher 在 Godaddy 服务器上不工作