Я хочу отправить несколько сообщений с данными в мое приложение Flutter. Я работал с уведомлениями, так как они отправлялись во все штаты (foreground, фон, прекращено), но обнаружил, что они сворачиваются. Я переключился на использование сообщений только с данными, и после некоторой модификации кода он работает безупречно на Android. Когда приложение находится в любом состоянии, я всегда получаю сообщение с данными. Даже если у пользователя нет подключения к Интернету и отправлено несколько сообщений, каждое из них будет получено после повторного подключения. Тестируя это на iOS, я запускал приложение в режиме выпуска, как и в Android, и все работало на переднем плане, когда я пытался провести пальцем по экрану домой, отправить приложение в фоновый режим и отправить сообщение, ничего получено. Когда я снова открываю приложение, появляется сообщение с данными. Если я отправлю несколько сообщений с данными, после повторного открытия приложения будет получено только последнее.
Такое поведение также наблюдается при простой блокировке iPhone
Здесь есть две основные проблемы:
1. Сообщения с данными не принимаются в фоновом/завершенном состоянии в выпуске. , но отлично работает в режиме профиля
2- Даже после повторного открытия приложения принимается только последнее сообщение с данными (аналогично сворачиванию уведомлений в FCM).
Я не нашел комментариев относительно такое поведение в документации FCM. Может ли кто-нибудь разобраться в этом и убедиться, нормально ли это поведение или нет. Если да, то как я могу это преодолеть или обойти?
Функция отправки сообщений с данными:
public function sendDataMessage($deviceTokens, $data = [], $priority = "high")
{
$messaging = app('firebase.messaging');
$clean_data = $data;
if (isset($data["type"]) && $data["type"] == "chat" && $data["action"] == "receiveMessage") {
unset($clean_data["fcm_message"]);
}
$messages = [];
foreach ($deviceTokens as $token) {
try {
if (isset($data["type"]) && $data["type"] == "chat" && $data["action"] == "receiveMessage") {
$chat_message = $data["fcm_message"];
$clean_data["title"] = Chats::select("name")->find($data["chat_id"])->name;
$clean_data["body"] = $chat_message["sender"]["name"] . ": " . ($chat_message["content"]["type"] == "Text" ? $chat_message["content"]["body"] : $chat_message["content"]["type"]);
}
$messages[] = CloudMessage::withTarget('token', $token)
->withData($clean_data)
->withAndroidConfig(AndroidConfig::fromArray([
'priority' => 'high', // Use high priority
'ttl' => 86400 * 28, // 4 weeks in seconds
]))
->withApnsConfig(ApnsConfig::fromArray([
'headers' => [
'apns-expiration' => strval(time() + 86400 * 28), // Expiry timestamp
'apns-priority' => '10',
],
'payload' => [
'aps' => [
// 'sound' => 'default',
"content-available" => 1,
"mutable-content" => 1
],
],
]));
} catch (Exception $e) {
return $e;
}
}
try {
$report = $messaging->sendAll($messages);
} catch (NotFound $e) {
return $e;
} catch (Exception $e) {
return $e;
}
return $report->successes()->count();
}
Обработчик Firebase:
static void initializeFCMHandler() async {
FirebaseMessaging.onBackgroundMessage(handleBackgroundMessage);
FirebaseMessaging.onMessage.listen(handleMessage);
}
@pragma('vm:entry-point')
static Future handleBackgroundMessage(RemoteMessage? message) async {
if (message?.notification != null) {
handleNotification(message, isBackground: true);
} else {
handleDataMessage(message, isBackground: true);
}
}
static void handleMessage(RemoteMessage? message) async {
if (message?.notification != null) {
handleNotification(message);
} else {
handleDataMessage(message);
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ped-in-ios
Сообщения только с данными сворачиваются и удаляются в iOS ⇐ IOS
Программируем под IOS
-
Anonymous
1734188791
Anonymous
Я хочу отправить несколько сообщений с данными в мое приложение Flutter. Я работал с уведомлениями, так как они отправлялись во все штаты (foreground, фон, прекращено), но обнаружил, что они сворачиваются. Я переключился на использование сообщений только с данными, и после некоторой модификации кода он работает безупречно на Android. Когда приложение находится в любом состоянии, я всегда получаю сообщение с данными. Даже если у пользователя нет подключения к Интернету и отправлено несколько сообщений, каждое из них будет получено после повторного подключения. Тестируя это на iOS, я запускал приложение в режиме выпуска, как и в Android, и все работало на переднем плане, когда я пытался провести пальцем по экрану домой, отправить приложение в фоновый режим и отправить сообщение, ничего получено. Когда я снова открываю приложение, появляется сообщение с данными. Если я отправлю несколько сообщений с данными, после повторного открытия приложения будет получено только последнее.
Такое поведение также наблюдается при простой блокировке iPhone
Здесь есть две основные проблемы:
1. Сообщения с данными не принимаются в фоновом/завершенном состоянии в [b]выпуске. [/b], но отлично работает в режиме профиля
2- Даже после повторного открытия приложения принимается только последнее сообщение с данными (аналогично сворачиванию уведомлений в FCM).
Я не нашел комментариев относительно такое поведение в документации FCM. Может ли кто-нибудь разобраться в этом и убедиться, нормально ли это поведение или нет. Если да, то как я могу это преодолеть или обойти?
[b]Функция отправки сообщений с данными[/b]:
public function sendDataMessage($deviceTokens, $data = [], $priority = "high")
{
$messaging = app('firebase.messaging');
$clean_data = $data;
if (isset($data["type"]) && $data["type"] == "chat" && $data["action"] == "receiveMessage") {
unset($clean_data["fcm_message"]);
}
$messages = [];
foreach ($deviceTokens as $token) {
try {
if (isset($data["type"]) && $data["type"] == "chat" && $data["action"] == "receiveMessage") {
$chat_message = $data["fcm_message"];
$clean_data["title"] = Chats::select("name")->find($data["chat_id"])->name;
$clean_data["body"] = $chat_message["sender"]["name"] . ": " . ($chat_message["content"]["type"] == "Text" ? $chat_message["content"]["body"] : $chat_message["content"]["type"]);
}
$messages[] = CloudMessage::withTarget('token', $token)
->withData($clean_data)
->withAndroidConfig(AndroidConfig::fromArray([
'priority' => 'high', // Use high priority
'ttl' => 86400 * 28, // 4 weeks in seconds
]))
->withApnsConfig(ApnsConfig::fromArray([
'headers' => [
'apns-expiration' => strval(time() + 86400 * 28), // Expiry timestamp
'apns-priority' => '10',
],
'payload' => [
'aps' => [
// 'sound' => 'default',
"content-available" => 1,
"mutable-content" => 1
],
],
]));
} catch (Exception $e) {
return $e;
}
}
try {
$report = $messaging->sendAll($messages);
} catch (NotFound $e) {
return $e;
} catch (Exception $e) {
return $e;
}
return $report->successes()->count();
}
[b]Обработчик Firebase[/b]:
static void initializeFCMHandler() async {
FirebaseMessaging.onBackgroundMessage(handleBackgroundMessage);
FirebaseMessaging.onMessage.listen(handleMessage);
}
@pragma('vm:entry-point')
static Future handleBackgroundMessage(RemoteMessage? message) async {
if (message?.notification != null) {
handleNotification(message, isBackground: true);
} else {
handleDataMessage(message, isBackground: true);
}
}
static void handleMessage(RemoteMessage? message) async {
if (message?.notification != null) {
handleNotification(message);
} else {
handleDataMessage(message);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79280849/only-data-messages-being-collapsed-and-dropped-in-ios[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия