使颤动通知(通过firebase)弹出到前台(而不仅仅是状态栏中的图标)

问题描述 投票:4回答:1

我正在尝试为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>

android flutter firebase-cloud-messaging firebase-notifications
1个回答
0
投票

看起来您正在研究如何在Android上获取heads-up notification

[我建议使用FCM's "Data message",然后在您的FirebaseMessagingService.onMessageReceived实现中处理它,然后按照here的说明优先处理/优先处理。

© www.soinside.com 2019 - 2024. All rights reserved.