Сообщения только с данными сворачиваются и удаляются в iOSIOS

Программируем под IOS
Ответить
Anonymous
 Сообщения только с данными сворачиваются и удаляются в iOS

Сообщение Anonymous »

Я хочу отправить несколько сообщений с данными в мое приложение 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»