diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 560e6c858..b44af52ee 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -5,6 +5,8 @@
CFBundleURLTypes
+ CFBundleURLName
+ com.yunqiinnovation.deepsound
CFBundleURLSchemes
fb3829022037361855
@@ -38,6 +40,8 @@
DeepSound
CFBundleExecutable
$(EXECUTABLE_NAME)
+NSUserTrackingUsageDescription
+ This application needs to access your tracking data in order to offer better personalized services and advertisements
CFBundleIdentifier
$(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
diff --git a/lib/modules/login/controllers/facebookLogin.dart b/lib/modules/login/controllers/facebookLogin.dart
index d73cc7f87..61e17a4a8 100644
--- a/lib/modules/login/controllers/facebookLogin.dart
+++ b/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:flutter/foundation.dart';
+import 'package:flutter/material.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
import 'package:get/get.dart';
+import 'package:crypto/crypto.dart';
class Facebook {
String token = '';
@@ -9,35 +16,90 @@ class Facebook {
String email = '';
String pictureurl = '';
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登录
// 修改后的 signInWithFacebook
Future signInWithFacebook() async {
try {
- print("开始 Facebook 登录");
- final LoginResult result = await FacebookAuth.instance.login();
- print("Facebook 登录结果:$result");
-
- if (result.status == LoginStatus.success) {
- token = result.accessToken!.tokenString;
- print("Facebook Token: $token");
-
- final credential = FacebookAuthProvider.credential(token);
- print("Facebook Token: $credential");
- final userData = await FacebookAuth.instance.getUserData();
- name = userData["name"].toString();
-
- email = userData["email"].toString();
- pictureurl = userData["picture"]["data"]["url"].toString();
- id = userData["id"].toString();
- print("user login facebook ${userData..values}");
- print("user login facebook ${email}${pictureurl}${name}${id}");
-
- return true;
+ final rawNonce = generateNonce();
+ final nonce = sha256ofString(rawNonce);
+ 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;
+
+ print("tokenType${loginResult.accessToken!.type}");
+
+ if (Platform.isIOS) {
+ // 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 {
- print("登录失败,状态:${result.status},消息:${result.message}");
- return false;
+ 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();
+ name = userData["name"].toString();
+
+ email = userData["email"].toString();
+ pictureurl = userData["picture"]["data"]["url"].toString();
+ id = userData["id"].toString();
+ print("user login facebook ${email}${pictureurl}${name}${id}");
+
+ return true;
} catch (e) {
print("Facebook 登录异常:$e");
return false;