fetchAccountDetails method
Future<FacebookAccountDetails>
fetchAccountDetails(
- Session session, {
- required String accessToken,
Returns the account details for the given accessToken.
This method first verifies the token using Facebook's Debug Token API, then fetches the user's profile information from the Graph API.
Throws FacebookAccessTokenVerificationException if the user info retrieval fails.
Implementation
Future<FacebookAccountDetails> fetchAccountDetails(
final Session session, {
required final String accessToken,
}) async {
await _verifyAccessToken(session, accessToken: accessToken);
final response = await http
.get(
Uri.https(
'graph.facebook.com',
'/me',
{
'fields':
'id,name,first_name,last_name,email,picture.type(large)',
'access_token': accessToken,
},
),
)
.timeout(const Duration(seconds: 30));
if (response.statusCode != 200) {
session.logAndThrow(
'Failed to fetch Facebook user data: ${response.statusCode}',
);
}
final Map<String, dynamic> data;
try {
data = json.decode(response.body) as Map<String, dynamic>;
} catch (e) {
session.logAndThrow('Failed to parse Facebook user data response: $e');
}
FacebookAccountDetails details;
try {
details = _parseAccountDetails(data);
} catch (e) {
session.logAndThrow('Invalid user info from Facebook: $e');
}
try {
final getExtraInfoCallback = config.getExtraFacebookInfoCallback;
if (getExtraInfoCallback != null) {
await getExtraInfoCallback(
session,
accountDetails: details,
accessToken: accessToken,
transaction: null,
);
}
} catch (e) {
session.logAndThrow('Failed to get extra Facebook account info: $e');
}
return details;
}