2016-11-13 2 views
0

Я продолжаю получать ошибку «нулевой ссылки», когда пытаюсь войти в мое приложение Ionic2/Angular2, используя Google+, когда я «ионный бегущий Android» (эмулятор или на наземном устройстве). Но я не получаю эту ошибку, когда использую «ионную подачу».Ionic2 Angular2 Typcript2: Когда NgModule Imports работает на Кордове?

«Нулевая ссылка» указывает, что AngularFireModule.initializeApp(firebaseConfig) не запускается, прежде чем пытаться использовать Firebase при работе под управлением Android.

Вопросы:

  1. Когда делает «импорт» часть @NgModule декларации бега на Кордова против при просмотре в веб-браузере?
  2. Я исправлю в своем предположении , что AngularFireModule.initializeApp(firebaseConfig) не используется в Кордове? Если да, то как мне лучше всего подтвердить?

app.module.ts

import { NgModule } from '@angular/core'; 
import { IonicApp, IonicModule } from 'ionic-angular'; 
import { MyApp } from './app.component'; 

import { FormsModule } from '@angular/forms'; 

// Pages 
import { ForgotPasswordPage } from '../pages/auth/forgot-password/forgot-password'; 
import { AuthPage } from '../pages/auth/home/home'; 
import { LoginEmailPage } from '../pages/auth/login-email/login-email'; 
import { AboutPage } from '../pages/about/about'; 
import { ContactPage } from '../pages/contact/contact'; 
import { SignUpPage } from '../pages/auth/sign-up/sign-up'; 
import { HomePage } from '../pages/home/home'; 
import { TermsOfServicePage } from '../pages/terms-of-service/terms-of-service'; 
import { TabsPage } from '../pages/tabs/tabs'; 

import { AngularFireModule } from 'angularfire2'; 

// Providers 
import { DataProvider } from '../providers/data'; 
import { AuthProvider } from '../providers/auth'; 

export const firebaseConfig = { 
    apiKey: '****', 
    authDomain: '****.firebaseapp.com', 
    databaseURL: 'https://****.firebaseio.com/', 
    storageBucket: '****.appspot.com', 
}; 

@NgModule({ 
    declarations: [ 
    MyApp, 
    ForgotPasswordPage, 
    AuthPage, 
    LoginEmailPage, 
    SignUpPage, 
    AboutPage, 
    ContactPage, 
    TermsOfServicePage, 
    HomePage, 
    TabsPage 
    ], 
    imports: [ 
    AngularFireModule.initializeApp(firebaseConfig), 
    IonicModule.forRoot(MyApp), 
    FormsModule 
    ], 
    bootstrap: [IonicApp], 
    entryComponents: [ 
    MyApp, 
    ForgotPasswordPage, 
    AuthPage, 
    LoginEmailPage, 
    SignUpPage, 
    AboutPage, 
    ContactPage, 
    HomePage, 
    TabsPage, 
    TermsOfServicePage 
    ], 
    providers: [ 
    DataProvider, 
    AuthProvider 
    ] 
}) 
export class AppModule {} 

журнал Google в части auth.ts

loginWithGooglePlus() { 
    return Observable.create(observer => { 
    if (this.platform.is('cordova')) { 
     GooglePlus.login(['public_profile', 'email']).then(googlePlusData => { 
     let provider = firebase.auth.GoogleAuthProvider.credential(googlePlusData.authResponse.accessToken); 
     firebase.auth().signInWithCredential(provider).then(firebaseData => { 
      // process user data 
      observer.next(); 
     }); 
     }, error => { 
     observer.error(error); 
     }); 
    } else { 
     this.af.auth.login({ 
     provider: AuthProviders.Google, 
     method: AuthMethods.Popup 
     }).then((googlePlusData) => { 
     // process user data 
     observer.next(); 
     }).catch((error) => { 
     console.info("error", error); 
     observer.error(error); 
     }); 
    } 
    }); 
} 

Ошибка (как показано в Android Studio, с помощью «ионной build android ")

E/PluginManager: Uncaught exception from plugin 
      java.lang.NullPointerException: null reference 
       at com.google.android.gms.common.internal.zzaa.zzy(Unknown Source) 
       at com.google.android.gms.auth.api.signin.internal.zzc.getSignInIntent(Unknown Source) 
       at nl.xservices.plugins.GooglePlus.signIn(GooglePlus.java:165) 
       at nl.xservices.plugins.GooglePlus.execute(GooglePlus.java:70) 
       at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:117) 
       at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98) 
       at org.apache.cordova.PluginManager.exec(PluginManager.java:132) 
       at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57) 
       at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41) 
       at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) 
       at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.os.HandlerThread.run(HandlerThread.java:61) 

Это в config.xml файле

<plugin name="cordova-plugin-googleplus" spec="~5.1.1"> 
    <variable name="REVERSED_CLIENT_ID" value="com.****.****" /> 
</plugin> 

ответ

0

Что вы используете для значения здесь:

<plugin name="cordova-plugin-googleplus" spec="~5.1.1"> 
    <variable name="REVERSED_CLIENT_ID" value="com.****.****" /> 
</plugin> 

У меня была точно такая же проблема, и понял, что я проходил мой ID пакета, например com.javebratt.packagename, когда вы фактически передаете обратный идентификатор веб-сайта в Google Developers Console, так что это примерно так: com.googleusercontent.apps.<uniqueIdHere>

Затем он начал работать половину времени и пробил вторую половину, поэтому я решил передать webId функции login(), и он начал работать без проблем.

Смежные вопросы