Как отправить локальный вложенный файл в приложениях Expo Notifications IOS?IOS

Программируем под IOS
Ответить
Anonymous
 Как отправить локальный вложенный файл в приложениях Expo Notifications IOS?

Сообщение Anonymous »

Аналогично UNNotificationAttachment, который не может прикрепить изображение, но специфичен для Expo.
Исходя из вопроса, на который я ссылался, предположительно для него должен быть отдельный файл. Итак, я сделал следующее.

Код: Выделить всё

  const [localAssets] = useAssets(localAttachments ?? []);
const [assets, setAssets] = useState([]);

useEffect(() => {
let mounted = true;
(async () => {
if (!localAssets) {
return;
}
const uuid = Crypto.randomUUID();
const nextAssets = _.cloneDeep(localAssets.filter((it) => it.downloaded));
for (const asset of nextAssets) {
const tempLocalUri = `${FileSystem.cacheDirectory}${asset.hash}.${uuid}.${asset.type}`;
await FileSystem.copyAsync({
from: asset.localUri!,
to: tempLocalUri,
});

asset.localUri = tempLocalUri;
}
if (mounted) {
setAssets(nextAssets);
}
})();
return () => {
mounted = false;
};
}, [localAssets]);
Где я скопировал ресурс в другое место и обновил значение localUri. Затем я собираю данные и отправляю уведомление, используя useMemo и обратный вызов

Код: Выделить всё

  const attachments = useMemo<
Notifications.NotificationContentAttachmentIos[]
>(() => {
if (!assets) {
return [];
}
return assets
.filter((it) => it)
.map((it) => ({
identifier: it.hash,
type: `public.${it.type}`,
typeHint: `public.${it.type}`,
url: it.localUri,
hideThumbnail: false,
}));
}, [assets]);

const content = useMemo(
() => ({
...notificationPayload,
attachments: attachments,
}),
[notificationPayload, attachments],
);

const onSendNotification = useCallback(() => {
(async () => {
const request: Notifications.NotificationRequestInput = {
content: content,
trigger: {
date: Date.now() + 2_000,
},
};
try {
console.debug(attachments);
await Notifications.scheduleNotificationAsync(request);
} catch (error) {
console.error(error);
}
})();
}, [content]);
Результатом является следующая отладка, которая показывает UUID

Код: Выделить всё

[{"hideThumbnail": false,
"identifier": "633435dcb418833920a16771610ca404",
"type": "public.png",
"typeHint": "public.png",
"url": "file:///var/mobile/Containers/Data/Application/110DC7BD-A51E-44D2-A072-8C75BC8F1E3E/Library/Caches/633435dcb418833920a16771610ca404.3acf6d50-e0f0-4d5e-ad55-13b030479460.png"}]
и сообщение об ошибке

[Ошибка: не удалось запланировать уведомление. Ошибка Domain=UNErrorDomain Code=100 «Неверный URL-адрес файла вложения» UserInfo={NSLocalizedDescription=Неверный URL-адрес файла вложения}]


Подробнее здесь: https://stackoverflow.com/questions/791 ... ttachments
Ответить

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

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

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

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

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