Универсальная ссылка iOS не работает при вызове из PDF-файла, открытого в соответствующем приложенииIOS

Программируем под IOS
Ответить
Anonymous
 Универсальная ссылка iOS не работает при вызове из PDF-файла, открытого в соответствующем приложении

Сообщение Anonymous »

У нас есть приложение, которое доступно как через браузер, так и через приложения iOS и Android, используя одну и ту же схему пути (например, www.example.com/#/resource/123 на веб-сайте и resources/123 в приложении).

Универсальные ссылки iOS правильно настроены и работают, однако у нас есть функция приложения, которая генерирует PDF-файлы, содержащие ссылки (например, www.example.com/#/resource/123 ), которые следует обрабатывать как универсальные ссылки и поэтому открывать их в самом приложении.

Если PDF-файл создается и, таким образом, открывается из приложения, универсальные ссылки не работают, вместо этого они открываются в браузере по умолчанию, а нажатие на ссылку из того же PDF-файла, загруженного и открытого вне приложения, работает правильно, открывая маршрут в соответствующем приложении.
И веб-приложение, и iOS Версия использует ту же кодовую базу Vue.js, созданную с помощью Capacitor, в нашем файле Route.js у нас есть прослушиватель, который работает следующим образом:

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

import { App } from "@capacitor/app";

App.addListener("appUrlOpen", function (data) {
const slug = data.url.split("www.example.com/#").pop();
// We only push to the route if there is a slug present
if (slug) {
router.push({
path: slug,
});
}
});
Чтобы дать представление о контексте, приведем некоторые из наших зависимостей.

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

yarn list
├─ cordova-plugin-file-opener2@3.0.5
├─ cordova-plugin-file@6.0.2
├─ @aashu-dubey/capacitor-statusbar-safe-area@1.0.1
├─ @capacitor-community/fcm@2.0.2
│  ├─ @capacitor/core@^3.0.1
│  └─ @capacitor/core@3.4.0
├─ @capacitor-community/keep-awake@2.1.1
├─ @capacitor-community/sqlite@3.7.0
├─ @capacitor/android@4.8.2
├─ @capacitor/app@4.1.1
├─ @capacitor/camera@4.1.5
├─ @capacitor/cli@4.8.2
├─ @capacitor/core@4.8.2
├─ @capacitor/filesystem@4.1.5
├─ @capacitor/ios@4.8.2
├─ @capacitor/network@4.1.0
├─ @capacitor/push-notifications@4.1.2
├─ @capacitor/screen-orientation@6.0.2
├─ @capawesome/capacitor-app-update@5.0.1
├─ capacitor-barcode-scanner-torch@2.1.3
Файл PDF отправляется с сервера и открывается в приложении iOS следующим образом:

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

import { Capacitor } from "@capacitor/core";
import { FileOpener } from "@ionic-native/file-opener";
import { Filesystem, Directory } from '@capacitor/filesystem';

async downloadFile(url, fileName, mimeType = "application/pdf", addWorkArea = true, forceWebDownload = false, errorHandling = null) {
let vm = this;
if (!url) {
return;
}
url = vm.$API_BASEURL + url;
fileName = (mimeType == "application/pdf" && !fileName.includes('.pdf')) ? (fileName + '.pdf') : fileName;
if (vm.$store.state.isConnected) {
if (Capacitor.getPlatform() == 'web' || forceWebDownload) {
await vm.downloadWeb(url, fileName, errorHandling);
} else {
await vm.downloadAndroidAndiOS(url, fileName, mimeType, errorHandling);
}
} else {
vm.$router.push({
name: 'NoConnectionFound',
});
}
},

async downloadAndroidAndiOS(url, fileName, mimeType, errorHandling = null) {
let vm = this;
return new Promise(resolve => {
axios
.get(url, {responseType: "blob"})
.then(async response => {
mimeType = mimeType || response.data.type;
let reader = new FileReader();
reader.readAsDataURL(response.data);
reader.onloadend = () => vm.base64Data = reader.result;
setTimeout(async () => {
const savedFile = await Filesystem.writeFile({
path: fileName.replace(/[|&;$%@()+,]/g, "_"),
data: vm.base64Data,
directory: Directory.Cache,
});
FileOpener.open(savedFile.uri, mimeType);
}, 1500)
.then(() => {
resolve();
})
.catch(error => {
vm.lastError.errorObject = error;
}
resolve();
});
})
.catch(error => {
vm.lastError.errorObject = error;
if (vm.isNetworkError(error)) {
vm.openOfflineWarning();
}
resolve();
});
})
},

async downloadThePdf() {
let vm = this;
await vm.downloadFile(
"path/to/the/api/that/returns/the/pdf",
"Name of the file"
)
},
У нас нет идей, как это реализовать!

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-associat
Ответить

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

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

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

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

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