如果RN被杀死,如何执行某些事件?

时间:2018-10-23 09:36:12

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

不确定是否理解正确,但要遵循link

  

传递静默通知,并在用户设备的后台唤醒您的应用。

在我看来,即使该应用已被杀死,也可以执行一些操作。

当前我正在使用OneSignal,如下所示:

OneSignal.addEventListener('received', this.onReceived);

onReceived(store, notification) {
  store.dispatch(receivedNotification({ notification }));
}

但是,只有在应用处于后台或前台时,上述内容才能调度操作,但是一旦应用被杀死,尽管成功接收到通知,onReceived事件也不会触发。

所以我的问题是,是否可以在后台“唤醒”我的RN应用并调度redux操作?

2 个答案:

答案 0 :(得分:0)

没有任何事件可以杀死应用程序。您也不能阻止用户杀死您的应用程序。一旦它被杀死,您就无法“唤醒”它,因为您的代码未运行。仅当应用程序在后台/前景中时,您才能执行此类任务。

答案 1 :(得分:0)

是的,如果RN被杀死,则可以执行某些事件。 现在的问题是,我基本上也正在使用react-native,并且也遇到了一些挑战,如果RN被杀死,我也想执行一些事件,但是我没有得到任何答案。实际上,我关心的是打开一个可以在收到呼叫通知时显示呼叫屏幕,因此我进行了很多研究,找到了解决方法, 首先,我在javascript与Java之间创建了桥连接,然后编写了一个唤醒服务,每次我们收到通知时都会调用该服务,然后调用后台意图服务,在此服务中,我唤醒了活动并设置了一些标志来帮助我屏幕锁定时打开屏幕取决于条件

//接收者服务//

public class MessagingService extends WakefulBroadcastReceiver {

private static final String TAG = "FirebaseService";

@Override
public void onReceive(Context context, Intent intent) {
    Log.d(TAG, String.valueOf(!isAppOnForeground(context)));


    if (intent.getExtras() != null) {
        if (!isAppOnForeground((context))) {
            //This get called every time you receive notification
        }
    }
}

private boolean isAppOnForeground(Context context) {
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    if (appProcesses == null) {
        return false;
    }
    final String packageName = context.getPackageName();
    for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
        if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
            return true;
        }
    }
    return false;
}

}