gpt4 book ai didi

ios - Flutter 应用程序在 iOS 平台的 firebase 电话身份验证中崩溃

转载 作者:行者123 更新时间:2023-12-03 19:43:27 25 4
gpt4 key购买 nike

我已在我的项目中实现了 Firebase 电话身份验证,

在 Android 端一切正常,但对于 iOS 端,当我尝试从我的端发送验证码时,应用程序崩溃并失去连接。

我已在下面提交了我的代码。

ma​​in.dart

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
routes: <String, WidgetBuilder> {
'/homepage': (BuildContext context) => MyApp(),
'/landingpage': (BuildContext context) => MyHomePage()
}
);
}
}

class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
String phoneNo;
String smsCode;
String verificationId;

Future<void> verifyPhone() async {
print("main");
final PhoneCodeAutoRetrievalTimeout autoRetrieve = (String verId) {
print("varification id");
this.verificationId = verId;
};

final PhoneCodeSent smsCodeSent = (String verId, [int forceCodeResend]) {
print("send code dilog");
this.verificationId = verId;
smsCodeDialog(context).then((value) {
print('Signed in');
});
};

final PhoneVerificationCompleted verifiedSuccess = (AuthCredential user){
print('Phone Verification Completed');
};

final PhoneVerificationFailed veriFailed = (AuthException exception) {
print('${exception.message}');
};

await FirebaseAuth.instance.verifyPhoneNumber(

phoneNumber: "+919700000000",
codeAutoRetrievalTimeout: autoRetrieve,
codeSent: smsCodeSent,
timeout: const Duration(seconds: 5),
verificationCompleted: verifiedSuccess,
verificationFailed: veriFailed);
}

Future<bool> smsCodeDialog(BuildContext context) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return new AlertDialog(
title: Text('Enter sms Code'),
content: TextField(
onChanged: (value) {
this.smsCode = value;
},
),
contentPadding: EdgeInsets.all(10.0),
actions: <Widget>[
new FlatButton(
child: Text('Done'),
onPressed: () {
FirebaseAuth.instance.currentUser().then((user) {
if (user != null) {
Navigator.of(context).pop();
Navigator.of(context).pushReplacementNamed('/homepage');
} else {
Navigator.of(context).pop();
signIn();
}
});
},
)
],
);
});
}

signIn(){
final AuthCredential credential = PhoneAuthProvider.getCredential(
verificationId: verificationId,
smsCode: smsCode);

FirebaseAuth.instance.signInWithCredential(credential).then((user){
Navigator.of(context).pushReplacementNamed('/homepage');
}).catchError((e){
print('Auth Credential Error : $e');
});
}

@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('PhoneAuth'),
),
body: new Center(
child: Container(
padding: EdgeInsets.all(25.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(hintText: 'Enter Phone number'),
onChanged: (value) {
this.phoneNo = value;
},
),
SizedBox(height: 10.0),
RaisedButton(
onPressed: verifyPhone,
child: Text('Verify'),
textColor: Colors.white,
elevation: 7.0,
color: Colors.blue)
],
)),
),
);
}
}

提交按钮时出现错误

Launching lib/main.dart on Dhruvin’s iPhone in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project: ******
Running Xcode build...
Xcode build done. 99.4s
Installing and launching...
Syncing files to device Dhruvin’s iPhone...
Lost connection to device.

但是,我无法看到堆栈跟踪或日志,因为应用程序与调试器失去了连接。

最佳答案

我解决了这个问题,非常感谢@DevarshRanpura 帮助我,

1) 替换

signIn(){
final AuthCredential credential = PhoneAuthProvider.getCredential(
verificationId: verificationId,
smsCode: smsCode);

FirebaseAuth.instance.signInWithCredential(credential).then((user){
Navigator.of(context).pushReplacementNamed('/homepage');
}).catchError((e){
print('Auth Credential Error : $e');
});
}

到此

signIn() async {
final AuthCredential credential = PhoneAuthProvider.getCredential(
verificationId: verificationId,
smsCode: smsCode,
);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
print('User Id : ' + user.uid);
}

还在您的 dart 文件中定义 _auth

final FirebaseAuth _auth = FirebaseAuth.instance;

2) 将反向客户端 ID 添加到您的项目中

  • 在 xcode 中打开您的项目
  • 双击您的项目名称
  • 转到信息选项卡
  • 在“URL 类型”->“URL 方案”中添加反向客户端 ID

关于ios - Flutter 应用程序在 iOS 平台的 firebase 电话身份验证中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60374940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com