Я пытаюсь использовать Amplitude SDK для получения статистики из моего приложения Ionic 3.Однако, поскольку приложение написано на TypeScript с определенной файловой архитектурой, оно не так просто, как в официальной документации .
Однако я обнаружил @ types / амплитуду-js пакет и я подумал, что это решит все мои проблемы.Но, к сожалению, когда я компилирую свое приложение на своем устройстве, используя ionic cordova run android --device
, приложение не загружается, и я получаю следующее сообщение об ошибке:
Uncaught Error: Encountered undefined provider!
Usually this means you have a circular dependencies (might be caused by using 'barrel' index.ts files.
![*sigh*](https://i.stack.imgur.com/KkLNf.png)
Примечание: эта ошибка также появляется, когда я запускаю ionic serve
.
Вот что я сделал, шаг за шагом:
- Я установил @ types / амплитуду-js, запустив
npm install --save @types/amplitude-js
. - Я установил оригинальный Amplitude SDK, запустив
npm install amplitude-js
.Я заметил, что это необходимо сделать, иначе мое приложение не будет компилироваться только с пакетом @type (что имеет смысл). - Я добавил следующие строки в свой
app.module.ts
import { AmplitudeClient } from 'amplitude-js';
[...]
@NgModule({
[...]
providers: [
AmplitudeClient,
[...]
]
});
- Я также создал
AmplitudeProvider
, который будет управлять всеми событиями Amplitude в моем приложении:
import { Injectable } from '@angular/core';
import { HttpServiceProvider } from "../http-service/http-service";
import { AmplitudeClient } from 'amplitude-js';
/**
* AmplitudeProvider
* @description Handles Amplitude statistics
*/
@Injectable()
export class AmplitudeProvider {
constructor(
public http: HttpServiceProvider,
public amplitude: AmplitudeClient
) {
this.amplitude.init("MY_AMPLITUDE_KEY");
}
/**
* logEvent
* @description Logs an event in Amplitude
* @param eventTitle Title of the event
*/
public logEvent(title) {
// Do things not relevant here
}
}
Я уверен, что я делаю что-то не так с моей инъекцией зависимости и / или импортом, но я не понимаю что.И я не вижу никакой циклической зависимости, поскольку пакет amplitude-js
не сделан мной и не импортирует ни одного из моих провайдеров.
Заранее спасибо всем, кто укажет мне правильное направление!