首页 > 解决方案 > 类型“FacebookOriginal”不可分配给类型“Provider”(Ionic 5 - Facebook 离子原生)

问题描述

重新启动 ionic 应用程序后,我突然开始收到这些错误:

TS2322:类型“FacebookOriginal”不可分配给类型“提供者”。“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' 指的是一个值,但在这里被用作一种类型。您的意思是“typeof 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 Dependency Injection 不兼容,因为它在参数列表索引 2 处的依赖项无效。如果依赖类型是像字符串这样的原始类型,或者如果此类的祖先缺少 Angular 装饰器,则可能会发生这种情况。

这个错误让我发疯,我之前能够实际构建离子应用程序并使用 Facebook 登录。我尝试重新安装插件和类型并更改它们的版本,但没有成功。

标签: angularfacebookionic-framework

解决方案


Alright I got it!

Somewhere else in my application, I was using this:

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;
}

Hope this helps someone, this bug was a time waster


推荐阅读