Expo 推送通知未在 Android 手机中弹出(浮动通知)
Expo Push Notifications not popping in Android phones (Floating Notifications)
编辑:我发现这些被称为浮动通知。任何人都知道如何在 Android 设备上默认从应用程序(通过权限等)启用它们?
我目前正在 Android 设备上测试推送通知,我注意到虽然我收到了推送通知,但它们并没有在屏幕上弹出,而是停留在后台(我需要向下拖动顶部状态栏如图所示)。我认为这毫无用处,因为用户在使用 phone:
时并没有真正收到通知
在 iPhone 上,弹出窗口正确显示,没有任何问题。
要显示所谓的浮动通知,应用必须具有权限 SYSTEM_ALERT_WINDOW。
权限是用户给予的东西。因此,默认情况下无法从应用程序启用它们。您可以做的是将用户带到设置页面。
检查您是否已经拥有权限
推荐的方法是使用 Settings#canDrawOverlays(Context)。此权限仅在 API 级别 23 中引入。因此根据文档,无需检查旧设备中的权限.
然而,这在像小米 Mi 2 这样的 Marshmallow 之前的一些设备中并没有像预期的那样工作。所以最好按照 .
中所示的方式进行
如果没有权限,将用户带到设置页面
如果应用面向 API 级别 23 或更高级别,则应用用户必须通过权限管理屏幕明确向应用授予此权限。该应用通过发送带有操作 Settings.ACTION_MANAGE_OVERLAY_PERMISSION.
的意图来请求用户的批准
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent);
我终于用 Expo.Notifications.createChannelAsync
和 priority: "max"
让它工作了,在发送消息时添加 channelId: "mychannel"
.
编辑:我发现这些被称为浮动通知。任何人都知道如何在 Android 设备上默认从应用程序(通过权限等)启用它们?
我目前正在 Android 设备上测试推送通知,我注意到虽然我收到了推送通知,但它们并没有在屏幕上弹出,而是停留在后台(我需要向下拖动顶部状态栏如图所示)。我认为这毫无用处,因为用户在使用 phone:
时并没有真正收到通知在 iPhone 上,弹出窗口正确显示,没有任何问题。
要显示所谓的浮动通知,应用必须具有权限 SYSTEM_ALERT_WINDOW。
权限是用户给予的东西。因此,默认情况下无法从应用程序启用它们。您可以做的是将用户带到设置页面。
检查您是否已经拥有权限
推荐的方法是使用 Settings#canDrawOverlays(Context)。此权限仅在 API 级别 23 中引入。因此根据文档,无需检查旧设备中的权限.
然而,这在像小米 Mi 2 这样的 Marshmallow 之前的一些设备中并没有像预期的那样工作。所以最好按照
如果没有权限,将用户带到设置页面
如果应用面向 API 级别 23 或更高级别,则应用用户必须通过权限管理屏幕明确向应用授予此权限。该应用通过发送带有操作 Settings.ACTION_MANAGE_OVERLAY_PERMISSION.
的意图来请求用户的批准Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
context.startActivity(intent);
我终于用 Expo.Notifications.createChannelAsync
和 priority: "max"
让它工作了,在发送消息时添加 channelId: "mychannel"
.