【发布时间】:2021-09-07 08:31:05
【问题描述】:
我正面临这个问题,看起来我的 auth var 为空,但我没有发现任何问题。错误:
E/flutter (24944): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: NoSuchMethodError: The getter 'authentication' was called on null.
E/flutter (24944): Receiver: null
E/flutter (24944): Tried calling: authentication
E/flutter (24944): #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:54:5)
我的代码(只是有问题的函数):
addPlayListItem(String videoID, String playlistID) async {
final String apiUrl =
"https://www.googleapis.com/youtube/v3/playlistItems?part=snippet";
final FirebaseAuth _auth = FirebaseAuth.instance;
final GoogleSignIn googleSignIn = GoogleSignIn(
scopes: [
'email',
'profile',
'https://www.googleapis.com/auth/youtube',
],
);
final GoogleSignInAccount googleSignInAccount = await googleSignIn.signInSilently();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
idToken: googleSignInAuthentication.idToken,
accessToken: googleSignInAuthentication.accessToken);
final AuthResult authResult = await _auth.signInWithCredential(credential);
final FirebaseUser user = authResult.user;
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
final FirebaseUser currentUser = await _auth.currentUser();
assert(currentUser.uid == user.uid);
void signOutGoogle() async {
await googleSignIn.signOut();
}
print("token " +
googleSignInAuthentication.accessToken); // accessToken not idToken
final response = await http.post(
apiUrl,
headers: {
"Authorization": "Bearer ${googleSignInAuthentication.accessToken}",
// Use access token and add a space after the 'Bearer
"Accept": "application/json",
},
body: jsonEncode({
"snippet": {
"playlistId": "" + playlistID,
"resourceId": {"kind": "youtube#video", "videoId": "" + videoID}
}
}),
);
if (response.statusCode == 200) {
print("Song was added to playlist");
} else {
print(response.body);
print("Failture song wasn't added to playlist");
}
}
这是我在 iOS 设备上尝试使用该功能时得到的错误代码。也许这会提供更多信息。
2021-09-11 11:58:53.310702+0200 Runner[6447:55089] flutter: {
"error": {
"code": 403,
"message": "Request had insufficient authentication scopes.",
"errors": [
{
"message": "Insufficient Permission",
"domain": "global",
"reason": "insufficientPermissions"
}
],
"status": "PERMISSION_DENIED"
}
}
2021-09-11 11:58:53.310854+0200 Runner[6447:55089] flutter: Failture song wasn't added to playlist
我好像遇到了身份验证问题,但我不知道从哪里开始。
更新安卓: 干净的重建后,我得到了这个错误代码
E/flutter ( 3537): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 12500: , null, null)
E/flutter ( 3537): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7)
E/flutter ( 3537): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18)
E/flutter ( 3537): <asynchronous suspension>
E/flutter ( 3537): #2 MethodChannel.invokeMapMethod (package:flutter/src/services/platform_channel.dart:358:43)
E/flutter ( 3537): <asynchronous suspension>
E/flutter ( 3537): #3 GoogleSignIn._callMethod (package:google_sign_in/google_sign_in.dart:233:30)
E/flutter ( 3537): <asynchronous suspension>
E/flutter ( 3537): #4 GoogleSignIn.signIn.isCanceled (package:google_sign_in/google_sign_in.dart)
E/flutter ( 3537): <asynchronous suspension>
E/flutter ( 3537):
【问题讨论】:
标签: firebase flutter google-api youtube-api