У меня есть приложение Ionic 4, разработанное с использованием InAppBrowser. Фактически, почти все приложение выполняется с помощью InAppBrowser:
Экран-заставка> URL-адрес, переданный InAppBrowser> Загрузка сайта. Пользователь входит в систему, нажимает на ссылки и перемещается по сайту. Некоторые ссылки, по которым пользователь может щелкнуть, являются PDFS (тип содержимого = application / pdf), но не имеют расширения .pdf в конце имени файла.
В iOS они нормально загружаются. В Android PDF-файлы никогда не отображаются ....
Я читал, что это известный обходной путь. Я не могу использовать обходной путь для встраивания в Google Docs, поскольку URL-адреса PDF-файлов основаны на аутентификации на нашем сайте для просмотра и доступа к PDF-файлам.
Другой вариант, который я читаю, - получить URL-адрес, загрузить файл в браузер локальной системы пользователя;затем откройте его - все это с помощью FileSystem, File, FileTransfer и FileOpener. Ниже мой блок кода и вывод из Android Studio LOGCAT:
downloadPDF(pUrl: string) {
console.log("==== in downloadOpenPDF function ====");
if(this.platform.is('android')) {
var permissions = cordova.plugins.permissions;
permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE , function( status ){
if ( status.hasPermission ) {
console.log("We DO have access to write to external storage");
}
else {
console.warn("We DO NOT have access to write to external storage");
permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, this.success, this.error);
}
});
permissions.hasPermission(permissions.READ_EXTERNAL_STORAGE , function( status ){
if ( status.hasPermission ) {
console.log("We DO have access to read to external storage");
}
else {
console.warn("We DO NOT have access to read to external storage");
permissions.requestPermission(permissions.READ_EXTERNAL_STORAGE, this.success, this.error);
}
});
}
let downloadUrl = pUrl;
console.log("downloadUrl is ================"+downloadUrl);
let path = this.file.dataDirectory;
let filepath = path+'mcfrenderPDF.pdf';
console.log("path is =================="+path);
const transfer: FileTransferObject = this.fileTransfer.create();
transfer.download(downloadUrl, filepath,true).then(entry => {
let url = entry.toUrl();
console.log("url is ================="+url);
if(this.platform.is('ios') || this.platform.is('android')) {
console.log("================ Use Document Viewer");
this.document.viewDocument(url, 'application/pdf',{});
} else {
//console.log("Device is Android = Use Google Docs");
//this.openGoogleDocsPDF(pUrl);
console.log("local path to file is: "+path+'mcfrenderPDF.podf');
this.fileOpener.open(entry.URL, 'application/pdf');
}
})
}
Мой вывод из моего журнала выглядит следующим образом:
2019-11-03 13:26:05.401 5213-5333/com.cat.fpd.mobile.mcf D/FileTransfer: Saved file: file:///data/user/0/com.cat.fpd.mobile.mcf/files/mcfrenderPDF.pdf
2019-11-03 13:26:05.401 5213-5333/com.cat.fpd.mobile.mcf E/FileTransfer: File plugin cannot represent download path