Reputation: 97
I am developing a Bluetooth application using platform channel in flutter (using Java). But while I try to login with google-sign in( google_sign_in: ^4.5.6 ) I'm getting the error. I can login the details but I can't move to further page...... Actually, it's working in my office system, but when I copy the project and run in another it gives the error...Can anyone please help
main.dart
import 'package:bmsapp2/pages/loginpage.dart';
import 'package:flutter/material.dart';
void main() {
runApp(BmsApp());
}
class BmsApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
const curveHeight = 12.0;
return MaterialApp(
home: SafeArea(
child: Scaffold(
appBar: AppBar(
backgroundColor: Colors.amber[900],
shape: const MyShapeBorder(curveHeight),
),
body: LoginPage(),
),
),
);
}
}
class MyShapeBorder extends ContinuousRectangleBorder {
const MyShapeBorder(this.curveHeight);
final double curveHeight;
@override
Path getOuterPath(Rect rect, {TextDirection textDirection}) => Path()
..lineTo(0, rect.size.height)
..quadraticBezierTo(
rect.size.width / 2,
rect.size.height + curveHeight * 2,
rect.size.width,
rect.size.height,
)
..lineTo(rect.size.width, 0)
..close();
}
loginpage.dart
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:avatar_glow/avatar_glow.dart';
import 'bluetoothpage.dart';
final GoogleSignIn googleSignIn = GoogleSignIn(scopes: ['profile', 'email']);
class LoginPage extends StatefulWidget {
LoginPage({Key key}) : super(key: key);
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
bool isAuth = false;
GoogleSignInAccount _currentUser;
Widget buildAuthScreen() {
//return Text(_currentUser.displayName ?? '');
return SafeArea(
child: Center(
child: Container(
margin: EdgeInsets.only(top: 50),
child: Column(
//mainAxisAlignment: MainAxisAlignment.center,
children: [
CircleAvatar(
backgroundColor: Colors.white,
backgroundImage: NetworkImage(_currentUser.photoUrl),
radius: 50,
),
SizedBox(height: 15),
Text(
'You are logged in as ',
style: TextStyle(
color: Colors.grey,
fontSize: 15,
),
),
SizedBox(height: 5),
Text(
_currentUser.email,
style: TextStyle(
color: Colors.black,
fontSize: 15,
fontWeight: FontWeight.bold,
),
),
ElevatedButton(
onPressed: _logout,
child: Text("Logout".toUpperCase(),
style: TextStyle(fontSize: 14, letterSpacing: 2)),
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.all<Color>(Colors.white),
backgroundColor:
MaterialStateProperty.all<Color>(Colors.amber[900]),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(color: Colors.amber[900])))),
),
Container(
// height: 300,
child: AvatarGlow(
glowColor: Colors.blue,
endRadius: 70.0,
duration: Duration(milliseconds: 2000),
repeat: true,
showTwoGlows: true,
repeatPauseDuration: Duration(milliseconds: 100),
child: Material(
elevation: 4.0,
shape: CircleBorder(),
child: CircleAvatar(
backgroundColor: Colors.grey[200],
child: Image.asset(
'images/bt.png',
height: 40,
width: 250,
fit: BoxFit.fitWidth,
),
radius: 40.0,
),
),
),
),
ElevatedButton(
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => BluetoothPage()));
},
child: Text('Find your device',
style: TextStyle(fontSize: 15, letterSpacing: 2)),
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.all<Color>(Colors.white),
backgroundColor:
MaterialStateProperty.all<Color>(Colors.amber[900]),
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(5),
side: BorderSide(color: Colors.amber[900])))),
),
],
),
),
),
);
}
_login() {
googleSignIn.signIn();
}
_logout() {
googleSignIn.signOut();
}
Widget buildUnAuthScreen() {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
child: Image.asset('images/touch.png'),
),
SizedBox(
height: 5.0,
),
Text(
'Next Generation Battery',
style: TextStyle(fontSize: 15, color: Colors.grey),
),
SizedBox(
height: 5.0,
),
Container(
child: GestureDetector(
onTap: () {
_login();
},
child: Image.asset(
'images/signin.png',
height: 75,
width: 250,
fit: BoxFit.fitWidth,
),
),
),
Text(
'Sign up here',
style: TextStyle(fontSize: 15, color: Colors.grey),
),
],
),
));
}
void handleSignin(GoogleSignInAccount account) {
if (account != null) {
print('User Signed in $account');
setState(() {
isAuth = true;
_currentUser = account;
});
} else {
setState(() {
isAuth = false;
//_currentUser = null;
});
}
}
@override
void initState() {
super.initState();
googleSignIn.onCurrentUserChanged.listen((GoogleSignInAccount account) {
handleSignin(account);
}, onError: (err) {
print('Error Signiing in : $err');
});
// Reauthenticate user when app is opened
/*googleSignIn.signInSilently(suppressErrors: false).then((account) {
handleSignin(account);
}).catchError((err) {
print('Error Signiing in : $err');
});*/
}
@override
Widget build(BuildContext context) {
return isAuth ? buildAuthScreen() : buildUnAuthScreen();
}
}
error:
E/flutter (12476): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
E/flutter (12476): #0 StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:581
E/flutter (12476): #1 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:158
E/flutter (12476): <asynchronous suspension>
E/flutter (12476): #2 MethodChannel.invokeMapMethod
package:flutter/…/services/platform_channel.dart:358
E/flutter (12476): <asynchronous suspension>
E/flutter (12476):
D/ViewRootImpl@4370975[SignInHubActivity](12476): mHardwareRenderer.destroy()#1
D/ViewRootImpl@4370975[SignInHubActivity](12476): Relayout returned: oldFrame=[0,0][1440,2560] newFrame=[0,0][1440,2560] result=0x5 surface={isValid=false 0} surfaceGenerationChanged=true
D/ViewRootImpl@4370975[SignInHubActivity](12476): mHardwareRenderer.destroy()#4
D/ViewRootImpl@4370975[SignInHubActivity](12476): dispatchDetachedFromWindow
D/InputTransport(12476): Input channel destroyed: fd=102
Upvotes: 5
Views: 16659
Reputation: 788
Also this problem happens with the apps downloaded from Google Play. This is because Google signs your app with it's own key which is not accessible for you. You can get it's SHA1 from: Google Play Console -> Your App ->Test and release -> Setup -> App signing
Upvotes: 6
Reputation: 127
kindly look at this thread as this explains the process of rectifying the error:
https://stackoverflow.com/a/78729782/6331978
Upvotes: 0
Reputation: 99
Recently fixed this issue after many tries, After updating to flutter-3.1.0-pre9, and Updating Android studio to chipmunk 2021.2.1, I got an interesting debug message.
The google sign in
works well on iOS, but no matter what I did, I keep getting this exact message PlatformException (sign_in_failed... blah blah blah
The new error message now has this also: clientId is not supported on Android and is interpreted as serverClientId. Use serverClientId
Adding clientId
as the parameter on Android seems to be the problem
Make sure your keystore sha-1
is registered on firebase and you have completed the instructions as stated on firebase
late GoogleSignIn googleSignIn;
***
@override
void initState() {
***
googleSignIn = GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/userinfo.profile',
],
serverClientId: isIOS ? null : googleClientId,
clientId: isIOS ? googleClientIdIOS : null);
***
This way you set clientId
while on iOS and serverClientId
on Android.
Hope this help.
Upvotes: 6
Reputation: 12353
[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
apiException:10 means it's most likely due to incorrect setup of SHA-1 or SHA-256. Since you said that it works at the office, it's probably a different environment than what you are working with now, and you should add these keys. This is also assuming that you are running a debug build, so add your debugging SHA-1 keys.
Upvotes: 9