当应用程序在后台时,React Native处理套接字连接的事件吗?

时间:2019-04-29 09:40:11

标签: android ios react-native websocket react-native-push-notification

我正在使用React native和WebSocket开发聊天应用程序,在活动模式下一切正常,但是当您按下主屏幕按钮以使应用程序进入后台模式时,WebSocket onMessage事件功能是没有触发

好处是WebSocket连接仍处于连接状态,但事件功能未触发。

我只想在后台模式下接收消息时推送通知。

我进行了一项研究,发现我需要始终保持安静的背景音轨(有人说这是非法的方式)。

是否有合法的API在后台保持连接状态?

我是否需要在后台模式下重新连接套接字连接

我的代码

events = (data) =>{

    if(data[0].message){
          if(this.state.appState !== 'active'){
             console.log('check here') // not working when the app in background mode
              PushNotification.localNotification({// not working when the app in background mode
                    message: data[0].message, 
                    number: 1,
                    title: 'a new message from: '+data[0].username,

                });
            }else{
                this.setState({messages: data[0]})
            }
    }
}


socketConnect = () =>{
        AsyncStorage.getItem('token').then((token) => {
        let connection = new wamp.Connection({ url: 'wss://*******/',
            realm: 'realm',
            authmethods: ['jwt'],
        });
        connection.onopen = (session, detalis) => {

            session.subscribe('messages', this.events);
        };
        connection.open();

        })
    };

1 个答案:

答案 0 :(得分:2)

  

我进行了一项研究,发现需要保持安静的背景   音轨一直在播放(有人说这是非法的方式)。

是的,这肯定会导致Apple / Google应用程序审核小组的拒绝。

  

是否有合法的API在后台保持连接状态?

实际上您不需要它(请参见下面的解决方案)

解决方案:

我假设您有一台服务器,您可以在其中管理所有的websocket连接并将消息路由到预期的客户端。您可以使用firebase cloud messaging向用户发送ios / android推送通知,该通知会通知他/她有新消息。当然,服务器和应用程序端都需要FCM。对于应用程序部分,您可以使用例如react-native-firebase。对于服务器,有几个libraries可用。现在有两种情况:

案例1)

如果应用程序已经在前台,则可以通过FCM(react-native-firebase)显示LocalNotification,也可以仅使用Websocket连接显示消息。

案例2)

您的应用程序处于后台,再次从服务器通过FCM发送推送通知。最大的优点是FCM与Apple Push Notification Service和Google Cloud Messaging Service进行通信(顺便说一句,谷歌很快将使用FCM)。这意味着您的用户会收到带有预览文本或完整消息的本地推送通知(由您决定)。然后,用户单击通知,然后您的应用再次打开。此时,您可以重新连接到Websocket,然后可以继续进行正常的应用行为。

其他说明:

  1. 这可能是唯一合法的方式
  2. 使用APNS / GMS / FCM比将应用程序始终保持在后台更加节能