android - 使 flutter 通知(通过firebase)弹出到前台(并且不仅仅是状态栏中的图标)

标签 android flutter firebase-cloud-messaging firebase-notifications

我正在尝试为 flutter 应用程序实现通知。

在 iPhone(左)上,它看起来像预期的那样,通知会显示一小段时间,然后自动隐藏。

但在 Android(右侧,Android 9,摩托罗​​拉)上,它只是在状态栏中显示为一个图标。
enter image description here
我怎样才能让它弹出?现在我必须向下滑动才能看到内容。

通知通过 Firebase 及其 PHP-Sdk 发送。 .

$serviceAccount = ServiceAccount::fromJsonFile('....');

$firebase = (new Factory)
    ->withServiceAccount($serviceAccount);
$messaging = $firebase->createMessaging();

$title = 'Test Titel '.date('YmdHis');
$body = 'Meine Nachricht '.date('YmdHis');
$colkey = 'newmessagtenoti';
$count = 23;

$message = new RawMessageFromArray([
        'notification' => [
            // https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#notification
            'title' => $title,
            'body' => $body,
        ],
        'data' => [
            'key_1' => 'Value 1',
            'key_2' => 'Value 2',
        ],

        'android' => [
            // https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#androidconfig
            'ttl' => '3600s',
            'priority' => 'high',
            "collapse_key"=> $colkey,

            'notification' => [
                'notification_priority' => 'PRIORITY_MAX',
                'visibility' => 'PUBLIC',
                'title' => $title,
                'body' => $body,
                'notification_count' => $count,
            ],
        ],
        'apns' => [
            // https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#apnsconfig
            'headers' => [
                'apns-priority' => '10',
            ],
            'payload' => [
                'aps' => [
                    'alert' => [
                        'title' => $title,
                        'body' => $body,
                    ],
                    'badge' => $count,
                    'apns-collapse-id' =>  $colkey,
                ],
            ],
        ],

    ]);

// $firebase->getMessaging()->send($message);
$report = $messaging->sendMulticast($message, $deviceTokens);

echo 'Successful sends: '.$report->successes()->count().PHP_EOL;
echo 'Failed sends: '.$report->failures()->count().PHP_EOL;

if ($report->hasFailures()) {
    foreach ($report->failures()->getItems() as $failure) {
        echo $failure->error()->getMessage().PHP_EOL;
    }
}

我读了所有documentation但即使具有高优先级,它也不会变得更大。

我想我在 Android 的代码中遗漏了一些东西。也许在“AndroidManifest.xml”中?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.flut7_push">

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="flut7_push"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- This keeps the window background of the activity showing
                 until Flutter renders its first frame. It can be removed if
                 there is no splash screen (such as the default splash screen
                 defined in @style/LaunchTheme). -->
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>            
            <intent-filter>
                <action android:name="FLUTTER_NOTIFICATION_CLICK" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>            
        </activity>       

    </application>
</manifest>

最佳答案

看起来您正在研究如何获得 heads-up notification在安卓上。

我建议使用 FCM's "Data message"然后在您的 FirebaseMessagingService.onMessageReceived 处处理实现,然后按照它解释的优先/重要性在那里播放here .

关于android - 使 flutter 通知(通过firebase)弹出到前台(并且不仅仅是状态栏中的图标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57849996/

相关文章:

listview - 一些滚动后 flutter ListView KeepAlive

android - 如何减少 flutter 中的视频录制大小?

flutter - Flutter:导航到另一个屏幕时,变量重置为默认值

android - 从android中的firebase发送通知时没有通知声音

php - 通过 FCM google-php-api HTTPv1 API 发送推送消息

android - 选择器资源可以使用样式中定义的颜色吗?

android - 如何将旧版本的数据库文件导入新版本?

android - XML Android 权限列表完整

Android 是否可以使用并发插值器?

android - 通过应用程序设置中的切换按钮启用或禁用 FCM 推送通知