mindbox-cloud / ios-sdk

Other
6 stars 16 forks source link

MBX-3394: Extra field APNS Push Notification for old format #404

Closed justSmK closed 3 months ago

justSmK commented 4 months ago

Парсить клики и доставку на старом формате пушей, если в пуш-уведомление добавлены кастомные параметры от клиентов#3394

Проверка на количество ключей == 1 в userInfo была нужна для возможности отличить форматы пушей друг от друга.

Старый формат пушей

``` { "aps" : { "mutable-content" : 1, "alert" : { "title" : "Привет, это push! 😄😄", "body" : "Тестовый текст пуша, смотри, я помещаюсь нормально?\nТут проверка в бэкграунд режиме" }, "content-available" : 1, "sound" : "default" }, "payload" : "", "imageUrl" : "https:\/\/mobpush-images.mindbox.ru\/Mpush-test\/223\/59c92f76-c417-4cf5-a468-af49d8296c49.gif", "uniqueKey" : "4c5e2a09-fae6-4c51-adc1-3224c98e2aef", "clickUrl" : "https:\/\/glvrd.ru\/", "buttons" : [ { "url" : "https:\/\/pushok.mindbox.ru\/?b=1&k=2", "text" : "Кнопка 1😡", "uniqueKey" : "cff05f38-6df4-4a10-9859-ea3bf0a65068" }, { "url" : "https:\/\/pushok.mindbox.ru\/?b=1&k=3", "text" : "Кнопка 2😡", "uniqueKey" : "4df5a10c-d5d1-4059-8e59-df3f12aec757" } ] } ```
Новый формат пушей
``` { "clickUrl": "https://mindbox.ru/", "payload": "{\n \"payload\": \"data\"\n}", "uniqueKey": "4cccb64d-ba46-41eb-9699-3a706f2b910b", "imageUrl": "https://mobpush-images.mindbox.ru/Mpush-test/63/5933f4cd-47e3-4317-9237-bc5aad291aa9.png", "buttons": [ { "url": "https://developers.mindbox.ru/docs/mindbox-sdk", "text": "Documentation", "uniqueKey": "1b112bcd-5eae-4914-8842-d77198466466" } ], "aps": { "mutable-content": 1, "alert": { "title": "Test title", "body": "Test description" }, "content-available": 1, "sound": "default" } } ```
В старом формате 1 блок `aps` и уже внутри него лежит ключ uniqueKey, по которому идет определение от Mindbox это пуш или нет, и когда определялось что ключ один то весь userInfo подменялся всем блоком aps -> `let innerUserInfo = userInfo["aps"] as? [AnyHashable: Any]; self.userInfo = innerUserInfo`. А в новом формате всё размазано равномерно по верхнему слою словаря, поэтому там просто делали `self.userInfo = userInfo`. Пофиксил это путем проверки у блока aps наличия ключа `uniqueKey`. Не стал привязываться к количеству элементов у объекта, так как это будет стремновато. Проще переделать здесь проверку определив формат, чем сохранять всегда любой `userInfo` а потом в `decode` искать нужный ключ по всем уровням вложенности словаря. Добавил пару логов. Может их на какой-то более грамотный вариант переделать, чтобы было легко отличать одно от другого?