tanlongsheng 2 years ago
parent
commit
66ed18dc4e
  1. 4
      ios/Runner/Info.plist
  2. 88
      lib/modules/login/controllers/facebookLogin.dart

4
ios/Runner/Info.plist

@ -5,6 +5,8 @@
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
<array> <array>
<dict> <dict>
<key>CFBundleURLName</key>
<string>com.yunqiinnovation.deepsound</string>
<key>CFBundleURLSchemes</key> <key>CFBundleURLSchemes</key>
<array> <array>
<string>fb3829022037361855</string> <string>fb3829022037361855</string>
@ -38,6 +40,8 @@
<string>DeepSound</string> <string>DeepSound</string>
<key>CFBundleExecutable</key> <key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string> <string>$(EXECUTABLE_NAME)</string>
<key>NSUserTrackingUsageDescription</key>
<string>This application needs to access your tracking data in order to offer better personalized services and advertisements</string>
<key>CFBundleIdentifier</key> <key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key> <key>CFBundleInfoDictionaryVersion</key>

88
lib/modules/login/controllers/facebookLogin.dart

@ -1,6 +1,13 @@
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart'; import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:crypto/crypto.dart';
class Facebook { class Facebook {
String token = ''; String token = '';
@ -9,35 +16,90 @@ class Facebook {
String email = ''; String email = '';
String pictureurl = ''; String pictureurl = '';
String id = ''; String id = '';
String generateNonce([int length = 32]) {
const charset =
'0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._';
final random = Random.secure();
return List.generate(length, (_) => charset[random.nextInt(charset.length)])
.join();
}
/// Returns the sha256 hash of [input] in hex notation.
String sha256ofString(String input) {
final bytes = utf8.encode(input);
final digest = sha256.convert(bytes);
return digest.toString();
}
// FaceBook登录 // FaceBook登录
// 修改后的 signInWithFacebook // 修改后的 signInWithFacebook
Future<bool> signInWithFacebook() async { Future<bool> signInWithFacebook() async {
try { try {
print("开始 Facebook 登录"); final rawNonce = generateNonce();
final LoginResult result = await FacebookAuth.instance.login(); final nonce = sha256ofString(rawNonce);
print("Facebook 登录结果:$result"); final LoginResult loginResult = await FacebookAuth.instance
.login(
loginTracking: LoginTracking.enabled,
nonce: nonce,
)
.catchError((onError) {
if (kDebugMode) {
//print(onError);
}
throw Exception(onError.message);
});
if (loginResult.accessToken == null) {
throw Exception(loginResult.message);
}
// Create a credential from the access token
OAuthCredential facebookAuthCredential;
if (result.status == LoginStatus.success) { print("tokenType${loginResult.accessToken!.type}");
token = result.accessToken!.tokenString;
print("Facebook Token: $token");
final credential = FacebookAuthProvider.credential(token); if (Platform.isIOS) {
print("Facebook Token: $credential"); // Create a credential from the access token
switch (loginResult.accessToken!.type) {
case AccessTokenType.classic:
final classicToken = loginResult.accessToken as ClassicToken;
token = classicToken.tokenString;
print('Token 字符串: ${classicToken.tokenString}');
print('classicToken值: ${classicToken}');
facebookAuthCredential = FacebookAuthProvider.credential(
classicToken.authenticationToken!,
);
break;
case AccessTokenType.limited:
final limitedToken = loginResult.accessToken as LimitedToken;
token = limitedToken.tokenString;
print('Token 字符串: ${limitedToken.tokenString}');
print('LimitedToken值: ${limitedToken}');
facebookAuthCredential = OAuthCredential(
providerId: 'facebook.com',
signInMethod: 'oauth',
idToken: limitedToken.tokenString,
rawNonce: rawNonce,
);
break;
}
} else {
facebookAuthCredential = FacebookAuthProvider.credential(
loginResult.accessToken!.tokenString,
);
token = loginResult.accessToken!.tokenString;
}
print('facebookAuthCredential值: ${facebookAuthCredential}');
if (facebookAuthCredential == null) {
throw Exception("Facebook Login Fail.");
}
final userData = await FacebookAuth.instance.getUserData(); final userData = await FacebookAuth.instance.getUserData();
name = userData["name"].toString(); name = userData["name"].toString();
email = userData["email"].toString(); email = userData["email"].toString();
pictureurl = userData["picture"]["data"]["url"].toString(); pictureurl = userData["picture"]["data"]["url"].toString();
id = userData["id"].toString(); id = userData["id"].toString();
print("user login facebook ${userData..values}");
print("user login facebook ${email}${pictureurl}${name}${id}"); print("user login facebook ${email}${pictureurl}${name}${id}");
return true; return true;
} else {
print("登录失败,状态:${result.status},消息:${result.message}");
return false;
}
} catch (e) { } catch (e) {
print("Facebook 登录异常:$e"); print("Facebook 登录异常:$e");
return false; return false;

Loading…
Cancel
Save