2016-11-13 2 views
0

"ionic run android"(에뮬레이터 또는 영역 장치)에서 Google+를 사용하여 Ionic2/Angular2 앱에 로그인하려고하면 "null 참조"오류가 계속 발생합니다. 하지만 "ionic serve"를 사용하면 오류가 발생하지 않습니다.Ionic2 Angular2 Typescript2 : NgModule Imports는 언제 Cordova에서 실행됩니까?

"null reference"는 Android로 실행할 때 Firebase를 사용하기 전에 AngularFireModule.initializeApp(firebaseConfig)이 실행되고 있지 않음을 나타냅니다.

질문 :

  1. 때 수행하는 웹 브라우저로 볼 때 대 코르도바에 @NgModule 선언 실행의 "수입"부분?
  2. AngularFireModule.initializeApp(firebaseConfig)이 (가) 코르도바에서 실행되고 있지 않습니까? 그렇다면 어떻게 확인할 수 있습니까?

은 이온 "을 사용하여 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); 
     }); 
    } 
    }); 
} 

오류 (의 일부에

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

구글 로그를 app.module.ts 안드로이드 "파일)

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> 

내 Google 개발자 콘솔에서 역 웹 ID를 실제로 전달할 때 com.javebratt.packagename과 같은 패키지 ID이므로 다음과 같이 표시됩니다. com.googleusercontent.apps.<uniqueIdHere>

그런 다음 절반의 시간이 걸리고 나머지 절반이 깨져서 login() 함수에 webId를 전달하기로 결정했는데 아무 문제없이 작동하기 시작했습니다.