我正在尝试在我的应用程序上实现无密码电子邮件登录。 点击链接后,该应用会从后台返回,但动态链接为空。
这是我发送邮件的方式(当然,我的应用具有正确的值):
2019-11-28 07:37:37:246 9 sec: 1000 operations; 109.69 current ops/sec; [CLEANUP: Count=16, Max=87935, Min=0, Avg=5495.19, 90=2, 99=87935, 99.9=87935, 99.99=87935] [INSERT: Count=1000, Max=4280319, Min=1372, Avg=99485.98, 90=48735, 99=4263935, 99.9=4280319, 99.99=4280319]
[OVERALL], RunTime(ms), 9129
[OVERALL], Throughput(ops/sec), 109.54102311315587
[TOTAL_GCS_Copy], Count, 9
[TOTAL_GC_TIME_Copy], Time(ms), 118
[TOTAL_GC_TIME_%_Copy], Time(%), 1.2925840727352393
[TOTAL_GCS_MarkSweepCompact], Count, 0
[TOTAL_GC_TIME_MarkSweepCompact], Time(ms), 0
[TOTAL_GC_TIME_%_MarkSweepCompact], Time(%), 0.0
[TOTAL_GCs], Count, 9
[TOTAL_GC_TIME], Time(ms), 118
[TOTAL_GC_TIME_%], Time(%), 1.2925840727352393
[CLEANUP], Operations, 16
[CLEANUP], AverageLatency(us), 5495.1875
[CLEANUP], MinLatency(us), 0
[CLEANUP], MaxLatency(us), 87935
[CLEANUP], 95thPercentileLatency(us), 13
[CLEANUP], 99thPercentileLatency(us), 87935
[INSERT], Operations, 1000
[INSERT], AverageLatency(us), 99485.982
[INSERT], MinLatency(us), 1372
[INSERT], MaxLatency(us), 4280319
[INSERT], 95thPercentileLatency(us), 58335
[INSERT], 99thPercentileLatency(us), 4263935
[INSERT], Return=OK, 1000
我还添加了以下意图:
user.sendSignInWithEmailLink(
email: _email,
androidInstallIfNotAvailable: true,
iOSBundleID: "com.company.appname",
androidMinimumVersion: "16",
androidPackageName: "com.company.appname",
url: "https://appname.page.link/email",
handleCodeInApp: true);
尝试了不同的变化,没有帮助,包括编写了firebase
项目网址作为主机,例如:<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="appname.page.link" android:scheme="http"/>
<data android:host="appname.page.link" android:scheme="https"/>
</intent-filter>
数据仍然恢复为空。
有什么想法吗?我错过了什么吗?
答案 0 :(得分:1)
我已将firebase_dynamic_links
软件包更新为最新版本(0.5.0 + 9),
在使用以下配置时,它便开始工作。
发送登录链接配置:
firebaseAuth.sendSignInWithEmailLink(
email: email,
url: "https://mydemoapp.page.link/email",
androidInstallIfNotAvailable: true,
androidMinimumVersion: '21',
androidPackageName: 'com.example.mydemoapp'
handleCodeInApp: true,
iOSBundleID: 'com.example.mydemoapp');
AndroidManifest.xml 意向过滤器配置:
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<data android:host="mydemoapp.page.link" android:scheme="https"/>
<data android:host="mydemoapp.page.link" android:scheme="http"/>
</intent-filter>
在Flutter中获取动态链接。
该示例来自https://pub.dev/packages/firebase_dynamic_links
如果您的应用未通过动态链接打开,则getInitialLink()
将返回空值。因此,如果应用已打开,则必须FirebaseDynamicLinks.instance.onLink
实施。
void main() {
runApp(MaterialApp(
title: 'Dynamic Links Example',
routes: <String, WidgetBuilder>{
'/': (BuildContext context) => MyHomeWidget(), // Default home route
'/helloworld': (BuildContext context) => MyHelloWorldWidget(),
},
));
}
class MyHomeWidgetState extends State<MyHomeWidget> {
.
.
.
@override
void initState() {
super.initState();
this.initDynamicLinks();
}
void initDynamicLinks() async {
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
if (deepLink != null) {
Navigator.pushNamed(context, deepLink.path);
}
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;
if (deepLink != null) {
Navigator.pushNamed(context, deepLink.path);
}
},
onError: (OnLinkErrorException e) async {
print('onLinkError');
print(e.message);
}
);
}
.
.
.
}
mydemoapp.page.link
必须添加到Firebase控制台中的授权域中。
答案 1 :(得分:0)
是appname.page.link
还是appname.page.link/email
,您只需要指定一封电子邮件即可实现