как получить доступ к этому в плагине Cordova с IONIC - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь реализовать метод Apple-Sign-In, используя плагин Cordova и установить учетные данные для FireBase.

, что я на самом деле есть:

    constructor (
        public afAuth: AngularFireAuth,
        public afs: AngularFirestore,
        @Inject(FirebaseApp) firebase: any
    ){
        this.firebase = firebase;
    }

    loginApple(): Promise<boolean> {
        return new Promise((resolve, reject) => {
            cordova.plugins.SignInWithApple.signin({ 
                requestedScopes: [0, 1] 
            }, function(succ){
                var provider = new firebase.auth.OAuthProvider('apple.com').credential(succ.identityToken);
                this.afAuth.auth.signinWithCredential(provider).then(result => {
                    //--> it seems the problem is here, because variable THIS is not available in the cordova plugin without a ionic-native wrapper <--
                }).catch( error => {
                    reject( error.message || error );
                })
            }, function(err){
                reject("Apple login failed");
            })
        })
    }

1 Ответ

2 голосов
/ 14 января 2020

Значение this изменяется при определении обратного вызова с ключевым словом function. Простейший способ предотвратить это - использовать жирную стрелку для определения функции:

return new Promise((resolve, reject) => {
    cordova.plugins.SignInWithApple.signin({ 
        requestedScopes: [0, 1] 
    }, (succ) => { // change is here
        var provider = new firebase.auth.OAuthProvider('apple.com').credential(succ.identityToken);
        this.afAuth.auth.signinWithCredential(provider).then(result => {
        }).catch( error => {
            reject( error.message || error );
        })
    },(err) => { // changed here too, for consistence
        reject("Apple login failed");
    })
})

Также см. Этот ответ о причине проблемы и других решениях: Как получить доступ к правильному `this` внутри обратного вызова?

...