частота передачи файлов в IOS IONIC 3 - PullRequest
0 голосов
/ 02 октября 2018

Я прокомментировал, что разрабатываю приложение в IONIC 3 и работаю с собственной библиотекой для передачи файлов.

В момент загрузки файла в IOS он не выполняется, не так, когда он установлен или отлажен в Android.

В соответствии с ионной документацией я правильно ее реализую и не понимаю, почему или чего не хватает, чтобы IOS мог выполнить transfer.download, то есть инструкцию, которая не выполняется

иВ консоли появляется следующая ошибка:

console.warn: 'Собственный: попытался получить доступ к плагину FileTransfer, но он не установлен.

Ниже я оставляю свой код:

import { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer';
import { File } from '@ionic-native/file';

import { LoadingController } from 'ionic-angular';

declare var cordova: any;

@IonicPage()
@Component({
selector: 'page-liquidaciones',
templateUrl: 'liquidaciones.html',
})
export class LiquidacionesPage {
formLiquidaciones: FormGroup;
 public txtCorreoLiquidacion;
rutUsuario: any;
resultado: any;
liquidaciones: any;
liquidacionesSeleccionadas:any={};
loading: any;
storageDirectory: string = '';
//private fileTransfer: FileTransferObject;
//private localPath = '';

constructor(public navCtrl: NavController, 
          public navParams: NavParams,
          private alertCtrl: AlertController, 
          public formBuilder: FormBuilder, 
          public kiberKiberpro: KibernumKiberproProvider,
          public databaseService: DatabaseServiceProvider, 
          private transfer: FileTransfer, 
          private file: File,
          private androidPermissions: AndroidPermissions,
          public loadingController: LoadingController,
          public platform: Platform
        ){

this.formLiquidaciones = this.formBuilder.group({
  txtCorreoLiquidacion: ['', Validators.required]
});


this.platform.ready().then(() => {

  if(!this.platform.is('cordova')) {
    return false;
  }

  if (this.platform.is('ios')) {
    //this.storageDirectory = this.file.dataDirectory;
    this.storageDirectory = cordova.file.dataDirectory;
  }
  else if(this.platform.is('android')) {
    this.storageDirectory = cordova.file.externalRootDirectory + '/Download/';
    this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE).then(
      result => {
        if (result.hasPermission) {
          // code
        } else {
          this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE).then(result => {
            if (result.hasPermission) {
              // code
            }
          });
        }
      },
      err => this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.READ_EXTERNAL_STORAGE)
    );

  }
  else {
    return false;
  }
});

  this.databaseService.getSesion(2).then(result => {
    this.rutUsuario = result.valor;
    })
  .catch( error => {
  });
}

DescargarLiquidaciones(){
this.loading = this.loadingController.create({ content: "Descargando Liquidacion(es)..." });
  const fileTransfer: FileTransferObject = this.transfer.create();

  var enviarLiquidaciones = [];
  for(var i in this.liquidacionesSeleccionadas) {
    if(this.liquidacionesSeleccionadas[i]) {
      enviarLiquidaciones.push(i);
    }
  }

  if(enviarLiquidaciones.length == 0)
  {
    this.alerta("Debe seleccionar por lo menos una liquidación para que sea descargada.");
  }
  else
  {
    this.loading.present();

    this.txtCorreoLiquidacion = '';
    this.kiberKiberpro.DescargarEnviarLiquidaciones(this.rutUsuario,enviarLiquidaciones, this.txtCorreoLiquidacion).then((res) => {
      this.resultado = res;
      var respuesta = JSON.parse(this.resultado.data);
      let datos: string = JWT(this.resultado.data);
      if(respuesta.status == "200") {
        let autorizacion = this.resultado.headers;
        let nombreArchivo = datos.split("tmp/");
        let urlFinal = datos;
        fileTransfer.download(urlFinal , this.storageDirectory  + nombreArchivo[1]).then((entry) => {  
          console.log("LLEGA ACA");
          this.alerta("Se ha descargado el archivo de manera satisfactoria.");
          console.log("LLEGA ACA 2");
          this.loading.dismissAll();
          console.log("LLEGA ACA 3");
          this.databaseService.GuardaSQLlite(1, autorizacion.authorization);
          this.navCtrl.setRoot(HomePage);
        }, (error) => {
          this.alerta("Hubo un error al momento de descargar el archivo. Si el problema persiste favor contactarse al 816 35 12 o 816 35 09.");
          this.loading.dismissAll();
        });

      }
      else if (respuesta.status == "201"){
        this.alerta("Hubo un problema con el envío de la(s) liquidacion(es) al correo ingresado. Si el problema persiste favor contactarse al 816 35 12 o 816 35 09");
        this.loading.dismissAll();
        let autorizacion = this.resultado.headers;
        this.databaseService.GuardaSQLlite(1, autorizacion.authorization);
      }
      else if (respuesta.status == "401"){
        this.alerta("Token no válido.");
        this.loading.dismissAll();
      }
      else{
        this.alerta("Hubo un problema inesperado, Favor intente nuevamente. Si el problema persiste favor contactarse al 816 35 12 o 816 35 09");
        this.loading.dismissAll();
      }
    }, (err) => {
      this.alerta("Ha ocurrido un problema, intente nuevamente por favor. Si el error persiste pongase en contacto con el area de soporte.");
      this.loading.dismissAll();
    });
  }
}

Я остаюсь внимательным к вашим ответам и заранее благодарю вас за вашу помощь и мнения

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Мне кажется, что ваша логика передачи файлов не заключена в вызов this.platform.ready().Может ли быть так, что бывают случаи, когда это вызывается до того, как платформа готова (и, таким образом, до того, как плагин готов к использованию)?

0 голосов
/ 02 октября 2018

Я забыл поставить информацию о моей ионике, которая выглядит следующим образом:

Ионная:

Ионная (Ионная CLI): 4.1.2 (/ usr / local / lib / node_modules /)ionic) Ionic Framework: ионно-угловой 3.9.2 @ ionic / app-scripts: 3.1.10

Cordova:

cordova (Cordova CLI): 8.1.1 (cordova-lib@8.1.0) Платформы Cordova: ios 4.5.4 Плагины Cordova: cordova-plugin-ionic-клавиатура 2.1.3, cordova-plugin-ionic-webview 1.2.1, (и 6 других плагинов)

Система:

ios-deploy: 2.0.0 NodeJS: v8.12.0 (/ usr / local / bin / node) npm: 6.4.1 ОС: macOS Xcode: Xcode 9.4 Версия сборки 9F1027a

...