我创建了一个Ionic5+电容器++Firebase项目,并添加了最新版本的AngularFire。
桌面上的一切都很好,但当我在iPhone上启动时,出现了一个错误(嗯,没有错误,但重定向我的第一个页面不起作用(。
所以,日志中没有错误,只是出现了一个白色屏幕。
经过大量研究,我得出以下结论。
我使用AngularFireAuthGuard如下:
{
path: '',
loadChildren: () => import('./tabs/tabs.module').then(m => m.TabsPageModule),
...canActivate(() => redirectUnauthorizedTo(['landing']))
}
我的研究让我意识到,最新版本的AngularFire firebase Auth并没有被正确检测到。
所以我找到了一段代码,为我解决了一段时间的问题:
import { Component } from '@angular/core';
import { Capacitor } from '@capacitor/core';
import { initializeApp } from 'firebase/app';
import { indexedDBLocalPersistence, initializeAuth } from 'firebase/auth';
import { environment } from 'src/environments/environment';
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.scss'],
})
export class AppComponent {
constructor() {
const app = initializeApp(environment.firebase);
if (Capacitor.isNativePlatform) {
initializeAuth(app, {
persistence: indexedDBLocalPersistence
});
}
}
}
当我想在我的应用程序组件中添加onAuthStateChanged时,我得到了以下错误:
auth/已初始化
在我看来,这可能是因为我的app.module.ts看起来像这样:
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
BrowserModule,
IonicModule.forRoot(),
IonicStorageModule.forRoot(),
AppRoutingModule,
AngularFireAuthModule,
AngularFireModule.initializeApp(environment.firebase)
],
providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
bootstrap: [AppComponent],
})
我的应用程序在这里初始化,但如果我删除它,我会得到另一个注入错误。。。
你知道我该怎么解决这个问题吗?
想知道我的问题是否也有类似的关系:signin链接在web和android上都可以工作,但在iOS中应用程序打开,我看到链接被收到,但signInWithEmailLink((承诺既没有解决也没有捕获。
这是代码;我看到控制台日志,然后就沉默了:
console.log(`incoming Passwordless Login Link for mail ${email}: ${uri}, ${originalLink}`);
signInWithEmailLink(this.auth, email, originalLink)
.then(cred => {
console.log("successfully logged in", email, cred);
window.localStorage.removeItem("emailForSignIn");
this.router.navigateByUrl("/home");
})
.catch((err) => {
console.error("signInLink err", JSON.stringify(err));
this.ngZone.run(() => this.router.navigateByUrl("/pwlsignup"));
});
通话后,我确实看到了其中的几行,看看它是否相关:
nw_protocol_boringssl_get_output_frames(1301) [C4.1:2][0x7fee0fe19300] get output frames failed, state 8196
2018-11-12 22:12:05.398615-0800 QQBCHAT[37807:7011607] TIC Read Status [4:0x0]: 1:57
编辑:是的,我的肯定是另一个问题——我也找到了解决方案,只要有人在谷歌搜索中找到这个问题https://github.com/angular/angularfire/issues/2979#issuecomment-940910213
import {
getAuth,
indexedDBLocalPersistence,
initializeAuth,
provideAuth,
} from '@angular/fire/auth';
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [
...
provideAuth(() => {
if (Capacitor.isNativePlatform()) {
return initializeAuth(getApp(), {
persistence: indexedDBLocalPersistence,
});
} else {
return getAuth();
}
}),
]
})