连接到 android 应用程序中的推送器,多次还是一次?
Connect to pusher in android app, multiple or once?
在我的应用程序(流媒体系列、电影)中,我有一个用户部分可以为系列或电影设置提醒。我实现了 Pusher 来接收服务器消息以提醒数据。
我为提醒列表中的每个项目连接到频道是真的吗??或者我应该连接到推送器一次并在推送器事件中获取相关的系列/电影消息?(服务器端为每个提醒列表项实现推送器,我们应该更改服务器端实现还是我可以为每个项目连接到推送器?)
这是我对推送器的实现:
public Pusher getPusher() throws Exception {
if (pusher == null) {
HttpAuthorizer auth = new HttpAuthorizer(BuildConfig.PUSHER);
HashMap<String, String> authHeader = new HashMap<>();
authHeader.put("Authorization", SharedPref.INSTANCE.read(AUTH_TOKEN, ""));
auth.setHeaders(authHeader);
PusherOptions option = new PusherOptions();
option.setCluster(BuildConfig.PUSHER_CLUSTER);
option.setAuthorizer(auth);
pusher = new Pusher(BuildConfig.PUSHER_KEY, option);
pusher.subscribePrivate("private-app_ch." + serialId, new PrivateChannelEventListener() {
@Override
public void onAuthenticationFailure(String s, Exception e) {
Timber.i("pusher onAuthenticationFailure " + e.getMessage());
}
@Override
public void onSubscriptionSucceeded(String s) {
Timber.i("pusher onSubscriptionSucceeded: " + s);
}
@Override
public void onEvent(String s, String s1, String result) {
Timber.i("pusher onEvent" + s + ":" + s1);
Timber.i("pusher onEvent" + result);
}
}, "App\Events\AppBroadcastEvent");
}
return pusher;
}
最佳做法是与频道保持一个连接,但对提醒列表中的每一项进行订阅。
因此,您将为提醒列表中的每个项目调用 pusher.subscribePrivate,然后在需要发送提醒时在服务器端发布到每个单独的频道。
例如,如果用户想收到有关 'Stranger Things' 和 'Orange is the new black' 的提醒,您可以同时订阅:
pusher.subscribePrivate("private-app_ch.strangerthings"
和
pusher.subscribePrivate("private-app_ch.orangeisthenewblack"
然后您的服务器会发布关于 'Stranger Things' 的提醒到 Stranger things 频道和 OISTNB 到 OISTNB 频道等等。
这样只有相关的更新才会发送到客户端(服务器端过滤)。如果您只订阅一个频道,客户将收到他们可能不想更新的消息,您必须在客户端过滤掉这些消息。
这里也有说明:https://support.pusher.com/hc/en-us/articles/360025398514-Should-i-subscribe-to-lots-of-Channels-
另外一点值得考虑的是,频道只会在应用程序打开时保持活动连接。当应用程序 backgrounded/closed 时,连接将关闭。这意味着要发送提醒,用户必须始终在您的应用中。您可能还需要考虑在应用程序关闭时发送推送通知,这样用户就不会错过提醒。
在我的应用程序(流媒体系列、电影)中,我有一个用户部分可以为系列或电影设置提醒。我实现了 Pusher 来接收服务器消息以提醒数据。
我为提醒列表中的每个项目连接到频道是真的吗??或者我应该连接到推送器一次并在推送器事件中获取相关的系列/电影消息?(服务器端为每个提醒列表项实现推送器,我们应该更改服务器端实现还是我可以为每个项目连接到推送器?)
这是我对推送器的实现:
public Pusher getPusher() throws Exception {
if (pusher == null) {
HttpAuthorizer auth = new HttpAuthorizer(BuildConfig.PUSHER);
HashMap<String, String> authHeader = new HashMap<>();
authHeader.put("Authorization", SharedPref.INSTANCE.read(AUTH_TOKEN, ""));
auth.setHeaders(authHeader);
PusherOptions option = new PusherOptions();
option.setCluster(BuildConfig.PUSHER_CLUSTER);
option.setAuthorizer(auth);
pusher = new Pusher(BuildConfig.PUSHER_KEY, option);
pusher.subscribePrivate("private-app_ch." + serialId, new PrivateChannelEventListener() {
@Override
public void onAuthenticationFailure(String s, Exception e) {
Timber.i("pusher onAuthenticationFailure " + e.getMessage());
}
@Override
public void onSubscriptionSucceeded(String s) {
Timber.i("pusher onSubscriptionSucceeded: " + s);
}
@Override
public void onEvent(String s, String s1, String result) {
Timber.i("pusher onEvent" + s + ":" + s1);
Timber.i("pusher onEvent" + result);
}
}, "App\Events\AppBroadcastEvent");
}
return pusher;
}
最佳做法是与频道保持一个连接,但对提醒列表中的每一项进行订阅。
因此,您将为提醒列表中的每个项目调用 pusher.subscribePrivate,然后在需要发送提醒时在服务器端发布到每个单独的频道。
例如,如果用户想收到有关 'Stranger Things' 和 'Orange is the new black' 的提醒,您可以同时订阅:
pusher.subscribePrivate("private-app_ch.strangerthings"
和
pusher.subscribePrivate("private-app_ch.orangeisthenewblack"
然后您的服务器会发布关于 'Stranger Things' 的提醒到 Stranger things 频道和 OISTNB 到 OISTNB 频道等等。
这样只有相关的更新才会发送到客户端(服务器端过滤)。如果您只订阅一个频道,客户将收到他们可能不想更新的消息,您必须在客户端过滤掉这些消息。
这里也有说明:https://support.pusher.com/hc/en-us/articles/360025398514-Should-i-subscribe-to-lots-of-Channels-
另外一点值得考虑的是,频道只会在应用程序打开时保持活动连接。当应用程序 backgrounded/closed 时,连接将关闭。这意味着要发送提醒,用户必须始终在您的应用中。您可能还需要考虑在应用程序关闭时发送推送通知,这样用户就不会错过提醒。