gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 06:07:51 31 4
gpt4 key购买 nike

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

我正在为推送通知使用 native 推送通知库。应用程序应自动从后台启动并在没有用户交互的情况下退出状态,并且应调用 getInitialNotification 方法。我想在特定通知类型上调用应用程序。

===============================================

File: RNPushNotificationHelper

===============================================



public void invokeApp(Bundle bundle) {

String packageName = context.getPackageName();
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
String className = launchIntent.getComponent().getClassName();

try {
Class<?> activityClass = Class.forName(className);
Intent activityIntent = new Intent(context, activityClass);

if(bundle != null) {
activityIntent.putExtra("notification", bundle);
}

activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(activityIntent);
} catch(Exception e) {
Log.e(LOG_TAG, "Class not found", e);
return;
}
}

===============================================

File: RNReceivedMessageHandler

===============================================


// If notification ID is not provided by the user for push notification, generate one at random
if (bundle.getString("id") == null) {
SecureRandom randomNumberGenerator = new SecureRandom();
bundle.putString("id", String.valueOf(randomNumberGenerator.nextInt()));
}

Application applicationContext = (Application) context.getApplicationContext();

RNPushNotificationConfig config = new RNPushNotificationConfig(mFirebaseMessagingService.getApplication());
RNPushNotificationHelper pushNotificationHelper = new RNPushNotificationHelper(applicationContext);

boolean isForeground = pushNotificationHelper.isApplicationInForeground();

RNPushNotificationJsDelivery jsDelivery = new RNPushNotificationJsDelivery(context);
bundle.putBoolean("foreground", isForeground);
bundle.putBoolean("userInteraction", false);
jsDelivery.notifyNotification(bundle);

// If contentAvailable is set to true, then send out a remote fetch event
if (bundle.getString("contentAvailable", "false").equalsIgnoreCase("true")) {
jsDelivery.notifyRemoteFetch(bundle);
}

Log.v(LOG_TAG, "invokeApp: " + bundle);
pushNotificationHelper.invokeApp(bundle);

if (config.getNotificationForeground() || !isForeground) {
Log.v(LOG_TAG, "sendNotification: " + bundle);
pushNotificationHelper.sendToNotificationCentre(bundle);
}

但它似乎在后台或退出状态下不起作用。我检查了 logcat,它在前台显示日志。

最佳答案

通知操作

我假设这是不可能的,因为这将是一个主要的安全漏洞。

在 Android 文档中,只有点击通知和通知操作被列为后台操作的选项。 The section .

限制绕过

从 Android 10(API 级别 29)开始有一个所谓的“从后台启动 Activity 的限制”。

但是,这些有several exceptions .我认为您最感兴趣的是这些:

  • 该应用从系统接收通知 PendingIntent。在里面服务和广播接收器的未决 Intent 的情况下,应用程序可以在挂起的 Intent 后开始 Activity 几秒钟已发送。

  • 该应用已被授予 SYSTEM_ALERT_WINDOW 权限用户。

关于android - 如何在没有用户交互的情况下在 React Native 中收到通知时打开应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65321319/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com