Тип ‘FacebookOriginal’ не может быть назначен типу ‘Provider’ (ионный 5 — ионный родной Facebook)

#angular #facebook #ionic-framework

#угловой #Facebook #ионный фреймворк

Вопрос:

Я внезапно начал получать эти ошибки после перезапуска своего приложения ionic:

TS2322: тип ‘FacebookOriginal’ не может быть присвоен типу ‘Provider’. У типа ‘FacebookOriginal’ отсутствуют следующие свойства из типа ‘TypeProvider’: применить, вызвать, привязать, прототип и еще 5.

app.module

 // More imports above
import {Facebook} from '@ionic-native/facebook/ngx'; <--- I triple checked that this is the correct import

@NgModule({
    declarations: [
        // List of components here
    ],
    entryComponents: [],
    imports: [
        // List of modules here
    ],
    providers: [
        StatusBar,
        SplashScreen,
        IsLoggedInGuard,
        FCM,
        IsNotLoggedInGuard,
        Facebook, // <----- Error here
        {provide: RouteReuseStrategy, useClass: IonicRouteStrategy}
    ],
    bootstrap: [AppComponent]
})

export class AppModule {

}
  

И куда я ввожу ссылку:

‘Facebook’ ссылается на значение, но здесь используется как тип. Вы имели в виду «тип Facebook»?

login.component.ts

 // More imports above
import {Facebook} from '@ionic-native/facebook/ngx';

@Component({
    selector: 'app-login',
    templateUrl: './login.component.html',
    styleUrls: ['./login.component.scss'],
})
export class LoginComponent implements OnInit {

    public datosBasicos: Basicos;
    public colores: Color = new Color();

    constructor(
        public loginService: SessionService,
        private router: Router,
        private fb: Facebook, // <----- Error here
        private platform: Platform,
        private colorService: ColorService,
        public basicosService: BasicosService
    ) {
    }

    async ngOnInit() {
        // this.autologinIfPreview();
        await this.loginService.loginAnonimo();        
        this.colores = this.colorService.color;
        this.datosBasicos = await this.basicosService.findDatosBasicos().pipe(first()).toPromise();
    }

    public async loginFacebook() {
        const fbResponse = await this.fb.login(['public_profile', 'user_friends', 'email']).then(); // Because of previous error, this isn't working at all

        await this.loginService.loginFacebook(fbResponse);

        this.router.navigate(['/main/home']).then();
        // await this.loginService.loginFacebook();

    }
  

Если я добавлю «typeof Facebook», эта ошибка появляется во время выполнения:

Этот конструктор несовместим с внедрением зависимостей Angular, поскольку его зависимость по индексу 2 списка параметров недопустима. Это может произойти, если тип зависимости является примитивом, таким как строка, или если у предка этого класса отсутствует декоратор Angular.

Эта ошибка сводит меня с ума, я смог фактически создать приложение ionic и выполнить вход в систему с помощью Facebook раньше. Я попытался переустановить плагин и типы и изменить их версию без какого-либо успеха.

Комментарии:

1. this.fb.login([…]); удалите область user_friends, поскольку это приведет к сбою входа в систему при сборке выпуска и развертывании в app Store и play Store, просто используйте области public_profile и email. Это не связано с ошибкой, а является ошибкой furure. А для функции loginFacebook вы можете скопировать тот же контент, что и в документах ionic framework о плагине ,

Ответ №1:

Хорошо, я понял!

Где-то еще в моем приложении я использовал это:

session.service.ts

 import {FacebookLoginResponse} from '@ionic-native/facebook'; // <--- Here!!! should be: '@ionic-native/facebook/ngx'


public async loginFacebook(facebookResponse: FacebookLoginResponse): Promise<User> {
     if (facebookResponse) {
         const facebookCredential = firebase.auth.FacebookAuthProvider.credential(facebookResponse.authResponse.accessToken);

         const userCredential = await firebase.auth().signInWithCredential(facebookCredential);
         return userCredential.user;
     }
     return null;
}
  

Надеюсь, это кому-то поможет, эта ошибка была пустой тратой времени