Проект React Native — невозможно выполнять вызовы API с помощью AwsAmplify через пользовательскую библиотеку

У меня есть реактивное приложение (без выставки), которое называется myapp.

У меня есть частный пользовательский пакет под названием myapp-core, в котором я обрабатываю сервисы AwsAmplify (Auth, Storage) — для входа/выхода из системы и т. д.

Я хочу использовать myapp-core в проекте myapp, поэтому я добавил его как зависимость в package.json ("myapp-core": "file:../myapp-core",), а затем yarn install.

Проблема, с которой я столкнулся, заключается в том, что когда я вызываю myapp-core.authService.login(username, password) из мобильного проекта, я ловлю ошибку:

" { "строка": 177826, "столбец": 17, "sourceURL": "http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false” } ”

Из моего исследования это означает, что моя пользовательская библиотека не может выполнять вызовы API, но я точно не знаю.

Когда я использую объект Auth aws-amplify непосредственно в своем мобильном проекте, он работает.

Надеюсь, соответствующий код:

/**=============================**/
/** myapp/CoreServices.js **/

import { AmplifyService } from “myapp-core";

export default class CoreServices {

 constructor() {

    AmplifyService.configure();
    const auth = AmplifyService.authService();

    auth
      .login(“myusername”, “mypassword”)
      .then(user => console.warn("success", user))
      .catch(error => console.warn("error", error));
  }
}


/**=============================**/
/** myapp-core/AmplifySevice.js **/

import Amplify from 'aws-amplify';
import AuthService from '../AuthService/AuthService';
import awsConfigs from '../aws-exports';

class AmplifyService {

  static authServiceInstance = null;
  static storageServiceInstance = null;

  static configure(config = awsConfigs) {
    if (config === null || config === undefined) {
      throw new Error('AmplifyService must be initialized with Auth and Storage configurations.');
    }
    Amplify.configure({
      Auth: { /*...*/ },
      Storage: { /*...*/ }
    });
  }

  static authService() {
    if (!this.authServiceInstance) {
      this.authServiceInstance = new AuthService();
    }
    return this.authServiceInstance;
  }

  static storageService() {
    console.warn('storage service');
    //  initialize storage service
    //  return storage service
  }
}

person Calin-Cristian Ciubotariu    schedule 15.02.2019    source источник


Ответы (1)


Мне удалось решить проблему моего проекта. Может кому пригодится мое решение.

Проблема была не в AwsAmplify, а в том, как я связал проекты: myapp-core с myapp.

Проблема заключалась в том, что в myapp-core я использую пакет aws-amplify, который я обычно связываю с мобильными проектами (react-native link), но в моем случае я предположил (ошибочно), что это не так.

Решение заключалось в том, чтобы связать все необходимые пакеты в проектах iOS/Android для установки соответствующих библиотек pods/gradle, таких как react-native link amazon-cognito-identity-js для аутентификации.

...и теперь я наконец-то счастлив :))

Ссылки, которые проливают свет:

Если кто-то думает, что это не решение, и мне повезло или что-то в этом роде, пожалуйста, прокомментируйте или опубликуйте другой ответ.

person Calin-Cristian Ciubotariu    schedule 16.02.2019