В настоящее время у меня есть собственный модуль, написанный на Java, который вызывается через Headless JS:
index. js:
import { AppRegistry } from 'react-native';
import App from './App';
import { name as appName } from './app.json';
import backgroundNotificationHandler from './src/services/backgroundNotificationListener';
import firebase from '@react-native-firebase/app';
AppRegistry.registerComponent(appName, () => App);
firebase.messaging().setBackgroundMessageHandler(backgroundNotificationHandler);
backgroundNotificationHandler. js:
import { NativeModules } from 'react-native';
const backgroundNotificationHandler = async message => {
NativeModules.ActivityStarter.navigateToExample();
return Promise.resolve();
}
export default backgroundNotificationHandler;
ActivityStarter
создает уведомление, которое при нажатии перемещается в приложение. Я хотел бы изменить его так, чтобы он переходил к конкретному c реагирующему компоненту. Я использую response-native-router-flux для навигации.
ActivityStarterModule. java:
public class ActivityStarterModule extends ReactContextBaseJavaModule {
ActivityStarterModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Nonnull
@Override
public String getName() {
return "ActivityStarter";
}
@ReactMethod
void navigateToExample(String notificationMessage, int notificationID, String contentText) {
ReactApplicationContext context = getReactApplicationContext();
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder;
Resources res = context.getResources();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
String CHANNEL_ID = "channel_ID_0";
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "channel",
NotificationManager.IMPORTANCE_HIGH);
channel.setDescription("channel description");
manager.createNotificationChannel(channel);
builder = new NotificationCompat.Builder(context, CHANNEL_ID);
} else {
builder = new NotificationCompat.Builder(context);
}
Intent activityIntent = new Intent(context, MainActivity.class);
activityIntent.putExtra("FromNotification", true);
PendingIntent action = PendingIntent.getActivity(context, 0, activityIntent, PendingIntent.FLAG_CANCEL_CURRENT);
builder.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.ic_announcement_black_24dp))
.setSmallIcon(R.drawable.ic_announcement_black_24dp).setTicker("Large text!").setAutoCancel(true)
.setContentTitle(notificationMessage).setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL).setContentText(contentText)
.setFullScreenIntent(action, true);
Notification notification = builder.build();
int notificationCode = notificationID;
manager.notify(notificationCode, notification);
}
}
Как это можно сделать? ТИА.