簡體   English   中英

如何在 Flutter 中設置 firebase 身份驗證(分別使用 ``twitter_login: ^4.0.1`` 和 ``flutter_facebook_auth: ^4.0.1```)?

[英]How to set up firebase Authentication (with ```twitter_login: ^4.0.1``` and ```flutter_facebook_auth: ^4.0.1``` respectively) in Flutter?

Z047B10EEE763AFB6164E077CF1CC268Z 中的 Firebase 身份驗證(分別使用twitter_login: ^4.0.1flutter_facebook_auth: ^4.0.1 )。 我在兩個身份驗證過程中都遇到錯誤。 我還在開發人員帳戶中設置了Facebook LoginTwitter Login 也在網上瀏覽了許多文章,但似乎沒有一個有效。 在最近的更新之后。

收到錯誤信息:

E/com.facebook.GraphResponse(13052): {HttpStatus: 400, errorCode: 100, subErrorCode: 33, errorType: GraphMethodException, errorMessage: Unsupported get request. Object with ID 'XXXXXXXXXXXX' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api}

上述消息來自 Facebook 以下來自 Twitter

E/flutter (13052): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(400, Failed to generate request token., Please check your APIKey or APISecret., null)

AndroidManifest.xml文件。

<meta-data android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>

         <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
               "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
         <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
             <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="@string/fb_login_protocol_scheme" />
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
                 <data android:scheme="twitter-firebase-auth"/>
             </intent-filter>
         </activity>

pubspec.yaml包,

flutter_facebook_auth: 4.0.0
twitter_login: 4.0.1
firebase_auth: 3.3.5
firebase_core: 1.11.0

Facebook 登錄:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';


var title = "";
var displayName = "";
FirebaseAuth auth = FirebaseAuth.instance;

signInWithFacebook() async {
  try {
    final LoginResult result = await FacebookAuth.instance.login();
    switch (result.status) {
      case LoginStatus.success:
        final AuthCredential credential =
        FacebookAuthProvider.credential(result.accessToken!.token);
        if (kDebugMode) {
          print(result.accessToken!.token);
        }
        final userCredential = await auth.signInWithCredential(credential);
        if (kDebugMode) {
          print(credential.signInMethod);
        }
        // TODO: Store user.credential!.signInMethod in SharedPref.
        if (kDebugMode) {
          print(userCredential.user!.displayName);
        }
        // boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
        if (kDebugMode) {
          print("status: Status.Success");
        }
        break;
      case LoginStatus.cancelled:
        if (kDebugMode) {
          print("status: Status.Cancelled");
        }
        break;
      case LoginStatus.failed:
        if (kDebugMode) {
          print("status: Status.Failed");
        }
        break;
      default:
        if (kDebugMode) {
          print("null");
        }
        break;
    }
  } catch (e) {
    if (kDebugMode) {
      print('Error occurred!' + e.toString());
    }
  }
}

Twitter 登錄

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/foundation.dart';
import 'package:twitter_login/twitter_login.dart';

FirebaseAuth _auth = FirebaseAuth.instance;

signInWithTwitter() async {
  final twitterLogin = TwitterLogin(
    apiKey: "XXXXXXXXXXXXXX",
    apiSecretKey: "XXXXXXXXXXXXXXXXXXXX",
    redirectURI: "twitter-firebase-auth://",
  );
  final authResult = await twitterLogin.login();

  switch (authResult.status) {
    case TwitterLoginStatus.loggedIn:
      if (kDebugMode) {
        print("status: LogIn Success");
      }
      final AuthCredential twitterAuthCredential =
          TwitterAuthProvider.credential(
              accessToken: authResult.authToken!,
              secret: authResult.authTokenSecret!);

      final userCredential =
          await _auth.signInWithCredential(twitterAuthCredential);
      if (kDebugMode) {
        print("status: SignIn With Credential Success");
      }
      break;
    case TwitterLoginStatus.cancelledByUser:
      if (kDebugMode) {
        print("status: Cancelled By User");
      }
      break;
    case TwitterLoginStatus.error:
      if (kDebugMode) {
        print("status: Error");
      }
      break;
    default:
      if (kDebugMode) {
        print("status: null");
      }
  }
}

問題解決了,

Twitter 解決方案:

(瀏覽 twitter_login: ^4.0.1 文檔)。

<data android:scheme="flutter-twitter-auth"/>

將以上內容替換為,

<data android:scheme="your_app_name"/>

也替換下面的代碼片段

final twitterLogin = TwitterLogin(
      apiKey: "xxxxxxxxxx",
      apiSecretKey: "xxxxxxxxx",
      redirectURI: 'flutter-twitter-auth://',
    );

final twitterLogin = TwitterLogin(
      apiKey: "xxxxxxxxxx",
      apiSecretKey: "xxxxxxxxx",
      redirectURI: 'your_app_name://',
    );

最后在 twitter 開發者賬號中回調 URL 應該是,

your_app_name://

更改 XML 文件:

<meta-data android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>

         <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
               "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
         <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
             <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="@string/fb_login_protocol_scheme" />
             </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
                 <data android:scheme="twitter-firebase-auth"/>
             </intent-filter>
         </activity>

如下所示:

             <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="buildyourenglish"/>
            </intent-filter>
         <meta-data android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>

         <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
               "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
         <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
             <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="@string/fb_login_protocol_scheme" />
             </intent-filter>
             
         </activity>

Facebook 解決方案:

從以下鏈接生成的 Hash 密鑰:

http://tomeko.net/online_tools/hex_to_base64.php 

必須給SHA1:作為輸入。 (由 tomeko.net 和 stackoverflow.com 提供)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM