当通知到达并且应用程序在后台没有用户交互时,如何在 React Native 中执行操作?

Posted

技术标签:

【中文标题】当通知到达并且应用程序在后台没有用户交互时,如何在 React Native 中执行操作?【英文标题】:How to execute action, in React Native, when notification arrives and the app is in background without the interaction of the user? 【发布时间】:2021-08-02 02:30:10 【问题描述】:

我有一个从我的服务器接收推送通知的 React Native 应用程序。 当应用程序处于后台并且用户打开通知时,应用程序会打印一个标签。 当应用处于前台并收到通知时,应用会立即打印一个标签。

我想在应用处于后台时打印标签而无需用户交互。

我怎样才能做到这一点?

我正在考虑使用 Expo Background Fetch,但我需要在收到通知后立即打印标签,并且使用 Expo Background Fetch 我可能打印得太晚了。

谢谢

【问题讨论】:

【参考方案1】:

一个选项可以是使用覆盖 expo 通知服务的此类从 Java 打印标签

public class FirebaseMessageService extends FirebaseMessagingService 

@Override
  public void onCreate() 
    super.onCreate();


@Override
public void onMessageReceived(RemoteMessage remoteMessage) 
    
    //SHOW EXPO NOTIFICATION
    createNotificationsHelper().notificationReceived(createNotification(remoteMessage));
    
    
    //PRINT LABEL IN JAVA...
    


public void sendRegistrationToServer(String token) 
    // put your logic here to update fcm registration token


protected NotificationsHelper createNotificationsHelper() 
  return new NotificationsHelper(this, NotificationsScoper.create(this).createReconstructor());


protected Notification createNotification(RemoteMessage remoteMessage) 
  String identifier = remoteMessage.getMessageId();
  if (identifier == null) 
    identifier = UUID.randomUUID().toString();
  
  JSONObject payload = new JSONObject(remoteMessage.getData());
  NotificationContent content = new JSONNotificationContentBuilder(this).setPayload(payload).build();
  NotificationRequest request = createNotificationRequest(identifier, content, new FirebaseNotificationTrigger(remoteMessage));
  return new Notification(request, new Date(remoteMessage.getSentTime()));


protected NotificationRequest createNotificationRequest(String identifier, NotificationContent content, FirebaseNotificationTrigger notificationTrigger) 
  return new NotificationRequest(identifier, content, notificationTrigger);

并将其添加到您的清单中:

<service
    android:name=".FirebaseMessageService"
    android:exported="false">
    <intent-filter android:priority="-1">
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
  </service>

【讨论】:

Jorge 我需要为 ios 和 Android 做这件事,但在 React Native 中使用 javascript 代码。

以上是关于当通知到达并且应用程序在后台没有用户交互时,如何在 React Native 中执行操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有用户交互的情况下在后台接收 iOS 通知

如何在 React Native 中在没有用户交互的情况下收到通知时打开应用程序

当汽车到达特定半径时如何发送推送通知

当 Firebase 通知到达并且我打开了应用程序时,如何处理它?

在后台接收推送通知 iOS

当应用程序处于终止状态而没有用户交互时如何清除本地通知。