【问题标题】:How to Authenticate with facebook and twitter to the firebase in flutter?如何使用 facebook 和 twitter 对 firebase 进行身份验证?
【发布时间】:2023-03-10 10:24:02
【问题描述】:

我正在尝试使用 facebook 和 twitter 进行身份验证,并使用 facebook Developr console 的 setUp 部分完成,并实现了 facebook 登录方法来 dart 代码,但为什么会出现错误 facebookLogin.logInWithReadPermission。 但我正在关注飞镖包网站facebook_sign_inPlugin

代码:


 Future<FirebaseUser> signInWithFacebook()async{
   FacebookLogin facebookLogin = new FacebookLogin();
   final FacebookLoginResult result = await facebookLogin.logInWithReadPermissions(['email']);
 }

推特认证方法

Future<bool> signInWithTwitterAccount()async{
  setState(() {
     isLoading=true;
   });
    try{
    TwitterLogin twitterLogin = new TwitterLogin(
      consumerKey: consumerApiKey,
      consumerSecret: consumerSecretApiKey
    );
    TwitterLoginResult  _twitterLoginResult = await twitterLogin.authorize();
     TwitterSession _currentUserTwitterSession = _twitterLoginResult.session;
     AuthCredential authCredential = TwitterAuthProvider.getCredential(
        authToken: _currentUserTwitterSession.token,
        authTokenSecret: _currentUserTwitterSession.secret
     );
     AuthResult result = await auth.signInWithCredential(authCredential);
      if(result.user== null)
        return false;
      return true;
    }catch(error){
      Fluttertoast.showToast(msg: "Log in Error at :$error");
      return false;
    }
 }

Twitter 登录按钮:

Widget build(BuildContext context){
  return Scaffold(
    body: Center(
     child: FlatButton(
        child: Text(Login with Twitter),
         onPressed: () async{
           bool res= await signInWithGoogleAccount();
             if(!res)
              { setState(() {
                 isLoading=false;
                });
                Fluttertoast.showToast(msg: "Login failed");
              }else{  
              setState(() {
                isLoading=false;
              });
             Fluttertoast.showToast(msg: "Logged in successfully");
                            Navigator.of(context).pushReplacementNamed('/homepage');  
            }
         },
      )
    )
  );
}

例外,当点击 twitter 登录按钮时:

E/Twitter ( 7270): Invalid json: <?xml version="1.0" encoding="UTF-8"?><errors><error code="415">Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings</error></errors>
E/Twitter ( 7270): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
E/Twitter ( 7270):      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.models.SafeListAdapter$1.read(SafeListAdapter.java:45)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.models.SafeMapAdapter$1.read(SafeMapAdapter.java:45)
E/Twitter ( 7270):      at com.google.gson.Gson.fromJson(Gson.java:927)
E/Twitter ( 7270):      at com.google.gson.Gson.fromJson(Gson.java:892)
E/Twitter ( 7270):      at com.google.gson.Gson.fromJson(Gson.java:841)
E/Twitter ( 7270):      at com.google.gson.Gson.fromJson(Gson.java:813)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.TwitterApiException.parseApiError(TwitterApiException.java:110)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.TwitterApiException.readApiError(TwitterApiException.java:95)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.TwitterApiException.<init>(TwitterApiException.java:43)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
E/Twitter ( 7270):      at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
E/Twitter ( 7270):      at android.os.Handler.handleCallback(Handler.java:794)
E/Twitter ( 7270):      at android.os.Handler.dispatchMessage(Handler.java:99)
E/Twitter ( 7270):      at android.os.Looper.loop(Looper.java:176)
E/Twitter ( 7270):      at android.app.ActivityThread.main(ActivityThread.java:6635)
E/Twitter ( 7270):      at java.lang.reflect.Method.invoke(Native Method)
E/Twitter ( 7270):      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
E/Twitter ( 7270):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
E/Twitter ( 7270): Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $
E/Twitter ( 7270):      at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
E/Twitter ( 7270):      at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
E/Twitter ( 7270):      ... 18 more
E/Twitter ( 7270): Failed to get request token
E/Twitter ( 7270): com.twitter.sdk.android.core.TwitterApiException: HTTP request failed, Status: 403
E/Twitter ( 7270):      at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
E/Twitter ( 7270):      at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
E/Twitter ( 7270):      at android.os.Handler.handleCallback(Handler.java:794)
E/Twitter ( 7270):      at android.os.Handler.dispatchMessage(Handler.java:99)
E/Twitter ( 7270):      at android.os.Looper.loop(Looper.java:176)
E/Twitter ( 7270):      at android.app.ActivityThread.main(ActivityThread.java:6635)
E/Twitter ( 7270):      at java.lang.reflect.Method.invoke(Native Method)
E/Twitter ( 7270):      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
E/Twitter ( 7270):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
I/zygote64( 7270): Do partial code cache collection, code=121KB, data=74KB
I/zygote64( 7270): After code cache collection, code=121KB, data=74KB
I/zygote64( 7270): Increasing code cache capacity to 512KB
E/Twitter ( 7270): Authorization completed with an error
E/Twitter ( 7270): com.twitter.sdk.android.core.TwitterAuthException: Failed to get request token
E/Twitter ( 7270):      at com.twitter.sdk.android.core.identity.OAuthController$1.failure(OAuthController.java:94)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.internal.oauth.OAuth1aService$1.failure(OAuth1aService.java:191)
E/Twitter ( 7270):      at com.twitter.sdk.android.core.Callback.onResponse(Callback.java:42)
E/Twitter ( 7270):      at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
E/Twitter ( 7270):      at android.os.Handler.handleCallback(Handler.java:794)
E/Twitter ( 7270):      at android.os.Handler.dispatchMessage(Handler.java:99)
E/Twitter ( 7270):      at android.os.Looper.loop(Looper.java:176)
E/Twitter ( 7270):      at android.app.ActivityThread.main(ActivityThread.java:6635)
E/Twitter ( 7270):      at java.lang.reflect.Method.invoke(Native Method)
E/Twitter ( 7270):      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
E/Twitter ( 7270):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
I/Toast   ( 7270): Show toast from OpPackageName:com.company_name.project, PackageName:com.company_name.project
E/SpannableStringBuilder( 7270): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
E/SpannableStringBuilder( 7270): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
W/ContentCatcher( 7270): Failed to notify a WebView
W/ResourceType( 7270): No package identifier when getting name for resource number 0x00000000

【问题讨论】:

    标签: facebook authentication flutter twitter dart


    【解决方案1】:

    似乎最新版本中不存在 logInWithReadPermission 方法。如他们的存储库所示: https://github.com/roughike/flutter_facebook_login/blob/master/lib/flutter_facebook_login.dart

    您可以尝试按照示例代码所示登录,它使用“logIn”功能而不是 logInWithPermission,查看存储库示例here

    import 'dart:async';
    
    import 'package:flutter_facebook_login/flutter_facebook_login.dart';
    import 'package:flutter/material.dart';
    
    void main() => runApp(new MyApp());
    
    class MyApp extends StatefulWidget {
      @override
      _MyAppState createState() => new _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      static final FacebookLogin facebookSignIn = new FacebookLogin();
    
      String _message = 'Log in/out by pressing the buttons below.';
    
      Future<Null> _login() async {
        final FacebookLoginResult result =
            await facebookSignIn.logIn(['email']);
    
        switch (result.status) {
          case FacebookLoginStatus.loggedIn:
            final FacebookAccessToken accessToken = result.accessToken;
            _showMessage('''
             Logged in!
    
             Token: ${accessToken.token}
             User id: ${accessToken.userId}
             Expires: ${accessToken.expires}
             Permissions: ${accessToken.permissions}
             Declined permissions: ${accessToken.declinedPermissions}
             ''');
            break;
          case FacebookLoginStatus.cancelledByUser:
            _showMessage('Login cancelled by the user.');
            break;
          case FacebookLoginStatus.error:
            _showMessage('Something went wrong with the login process.\n'
                'Here\'s the error Facebook gave us: ${result.errorMessage}');
            break;
        }
      }
    
      Future<Null> _logOut() async {
        await facebookSignIn.logOut();
        _showMessage('Logged out.');
      }
    
      void _showMessage(String message) {
        setState(() {
          _message = message;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          home: new Scaffold(
            appBar: new AppBar(
              title: new Text('Plugin example app'),
            ),
            body: new Center(
              child: new Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  new Text(_message),
                  new RaisedButton(
                    onPressed: _login,
                    child: new Text('Log in'),
                  ),
                  new RaisedButton(
                    onPressed: _logOut,
                    child: new Text('Logout'),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 非常感谢,但我也提到了 Twitter。请你再帮我一个忙好吗?请为我提供 Twitter 身份验证代码或建议我任何完美的教程
    • 您好,先生,我想通过 Firebase 进行 Facebook 身份验证。并且您的代码未通过 firebase 进行身份验证。
    • 您是否已完成插件主页上建议的 AndroidManifest.xml 更改。此外,如果您遇到任何运行时错误,请提供错误日志。
    • 先生,Facebook 对 firebase 的身份验证已成功完成。但在 twitter 身份验证时出现异常。请看代码,我已经编辑了我的问题。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2017-03-11
    • 2011-04-30
    相关资源
    最近更新 更多