Как отправить вложения локального файла в Expo уведомления iOS вложения?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как отправить вложения локального файла в Expo уведомления 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 и обратный вызов < /p>

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

  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]);
< /code>
Результатом является следующая отладка, которая показывает UUID и является URI файла.  У меня также есть  < /code>, который подтверждает, что он отображается как изображение.[{"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"}]
< /code>
и сообщение об ошибке < /p>

[ошибка: не удалось назначить уведомление. Error domain = unerrordomain code = 100 "URL-адрес файла файла umpord use userinfo = {nslocalizeddescription = неверное прикрепление}] 

Также попытка использовать React-native-fs 
для предоставления Predirectorypath , а не Code> не работает. class = "lang-js prettyprint-override">

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

const tempLocalUri = `file://${RNFS.TemporaryDirectoryPath}${asset.hash}.${uuid}.${asset.type}`;

let target = `${RNFS.TemporaryDirectoryPath}${asset.hash}.${uuid}.${asset.type}`;
if (await RNFS.exists(target)) {
await RNFS.unlink(target);
}
await RNFS.copyFile(
asset.localUri!.substring('file://'.length),
target,
);
asset.localUri = tempLocalUri;
код по адресу https://github.com/trajano/expo-experim ... tories.tsx

Подробнее здесь: https://stackoverflow.com/questions/791 ... ttachments
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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