颤动:HttpException:来自推特插件的禁止失败

flutter: HttpException: Failed Forbidden from the twitter plugin

我正在尝试在我的应用程序中实现 Twitter 登录,但它不起作用,在 AppResult 对象中返回错误消息。有人知道解决方案吗?

我使用的包是 twitter_login: ^4.2.3

火力基地: firebase_core: ^1.11.0 firebase_auth: ^3.3.5

Twitter 配置(用户身份验证设置页面):

Firebase 配置:

Android 清单:

在 activity 标签内:

 <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <!-- Accepts URIs that begin with "example://gizmos” -->
            <!-- Registered Callback URLs in TwitterApp -->
            <data android:scheme="https" android:host="app-name.firebaseapp.com" />
            <!-- host is option -->
        </intent-filter>

在 activity 标签之后:

<meta-data android:name="flutterEmbedding" android:value="2" />

代码本身:

 final twitterLogin = TwitterLogin(
      apiKey: '123 it's the same one',
      apiSecretKey: 'proper one',
      redirectURI: 'https://app-name.firebaseapp.com/__/auth/handler');

  final authResult = await twitterLogin.login();
  print(authResult.errorMessage); // prints out HttpException: Failed Forbidden

代码通过身份验证打开 link,但在单击“授权应用程序”后,它 returns 到带有错误消息“HttpException:Failed Forbidden”的应用程序 此外,authToken 和 authTokenSecret 均为空。

如果您需要任何其他信息,请告诉我!

您收到禁止访问的 http 异常。所以,在官方文档中它说 -

The request is understood, but it has been refused or access is not allowed. An accompanying error message will explain why.

解决方案为-

Check that your developer account includes access to the endpoint you’re trying to use. You may also need to get your App allowlisted (e.g. Engagement API or Ads API) or sign up for access.

您可以查看 - Twitter API Documentation

希望对您有所帮助。

所以,经过一些挖掘,我找到了问题的答案。为了让它工作,我做了以下事情:

  1. 将 android 方案更改为 appname://

  2. 删除了 android 主机

    <intent-filter>
     <action android:name="android.intent.action.VIEW" />
     <category android:name="android.intent.category.DEFAULT" />
     <category android:name="android.intent.category.BROWSABLE"/>
     <!-- Accepts URIs that begin with "example://gizmos” -->
     <!-- Registered Callback URLs in TwitterApp -->
     <data android:scheme="appname" />
         <!-- host is option -->
     </intent-filter>
    
  3. 将 Twitter 配置中的重定向 url 更改为 appname://

  4. 提升了对 Twitter 门户的访问权限

  5. 使用 loginV2 函数和 OAuth2 而不是 OAuth1

     Future<UserCredential> _signInWithTwitter() async {
       // Create a TwitterLogin instance
    
    
      final twitterLogin = TwitterLogin(
           apiKey: '123',
           apiSecretKey: '1234',
           redirectURI: 'appname://');
    
       // Trigger the sign-in flow
       final authResult = await twitterLogin.loginV2();
       print(authResult.toMap());
    
       // Create a credential from the access token
       final twitterAuthCredential = TwitterAuthProvider.credential(
         accessToken: authResult.authToken!,
         secret: authResult.authTokenSecret!,
       );
    
       // Once signed in, return the UserCredential
       return await FirebaseAuth.instance
           .signInWithCredential(twitterAuthCredential);
     }
    
  6. 完全没有使用firebase提供的回调(这个在README里也有提到,但是我懒得去查)