我在android中的私人频道订阅上有问题。 这些是我的代码
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization", code);
headers.put("Content-Type", "application/x-www-form-urlencoded");
headers.put("Accept", "application/json");
final HttpAuthorizer authorizer = new HttpAuthorizer("My URL");
authorizer.setHeaders(headers);
PusherOptions options = new PusherOptions()
.setEncrypted(true)
.setCluster("ap2")
.setAuthorizer(authorizer);
final Pusher pusher = new Pusher("KEY", options);
pusher.connect(new ConnectionEventListener() {
@Override
public void onConnectionStateChange(ConnectionStateChange change) {
}
@Override
public void onError(String message, String code, Exception e) { }
}, ConnectionState.ALL);
PrivateChannel channel = pusher.subscribePrivate(channelName);
channel.bind("message-sent", new PrivateChannelEventListener() {
@Override
public void onAuthenticationFailure(String string, Exception ex) {}
@Override
public void onSubscriptionSucceeded(String string) {
}
@Override
public void onEvent(String string, String string1, String string2) {}});
pusher.connect();
这创建成功连接但是在订阅中确实返回了任何结果。 请帮我解决这个问题。
答案 0 :(得分:0)
我认为您的问题来自于在连接频道之前调用bind()。
你能尝试在回调中放置subscribe和bind调用,类似于这个(我将它们移到方法中,因此更容易理解):
/*
* Fill the binprm structure from the inode.
* Check permissions, then read the first 128 (BINPRM_BUF_SIZE) bytes
*
* This may be called multiple times for binary chains (scripts for example).
*/
int prepare_binprm(struct linux_binprm *bprm)
{
int retval;
bprm_fill_uid(bprm);
/* fill in binprm security blob */
retval = security_bprm_set_creds(bprm);
if (retval)
return retval;
bprm->cred_prepared = 1;
...
static void bprm_fill_uid(struct linux_binprm *bprm)
{
/* Be careful if suid/sgid is set */
inode_lock(inode);
/* reload atomically mode/uid/gid now that lock held */
mode = inode->i_mode;
uid = inode->i_uid;
gid = inode->i_gid;
...
在主要方法中,您只需拨打Pusher pusher;
PrivateChannel channel;
void subscribeToChannel() {
channel = pusher.subscribePrivate(channelName, new PrivateChannelEventListener() {
@Override
public void onSubscriptionSucceeded(String s) {
bindToEvents();
}
@Override
public void onAuthenticationFailure(String s, Exception e) {}
@Override
public void onEvent(String s, String s1, String s2) {}
});
}
void bindToEvents() {
channel.bind("message-sent", new PrivateChannelEventListener() {
@Override
public void onAuthenticationFailure(String string, Exception ex) {}
@Override
public void onSubscriptionSucceeded(String string) {}
@Override
public void onEvent(String string, String string1, String string2) {}});
}
即可在成功连接时调用pusher.connect()
:
subscribeToChannel()