颤动: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 配置(用户身份验证设置页面):
- OAuth 1.0a 已启用(它是否适合插件?)
- 请求用户发送电子邮件:已禁用
- 应用权限:读取
- 回调 URI:https://project-name.firebaseapp.com/__/auth/handler
- 网站url:https://www.google.com/
- 除此之外一切都是空的
Firebase 配置:
- 推特授权已启用
- api键组(检查了10次)
- api秘密集(一样东西)
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
希望对您有所帮助。
所以,经过一些挖掘,我找到了问题的答案。为了让它工作,我做了以下事情:
将 android 方案更改为 appname://
删除了 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>
将 Twitter 配置中的重定向 url 更改为 appname://
提升了对 Twitter 门户的访问权限
使用 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);
}
完全没有使用firebase提供的回调(这个在README里也有提到,但是我懒得去查)
我正在尝试在我的应用程序中实现 Twitter 登录,但它不起作用,在 AppResult 对象中返回错误消息。有人知道解决方案吗?
我使用的包是 twitter_login: ^4.2.3
火力基地: firebase_core: ^1.11.0 firebase_auth: ^3.3.5
Twitter 配置(用户身份验证设置页面):
- OAuth 1.0a 已启用(它是否适合插件?)
- 请求用户发送电子邮件:已禁用
- 应用权限:读取
- 回调 URI:https://project-name.firebaseapp.com/__/auth/handler
- 网站url:https://www.google.com/
- 除此之外一切都是空的
Firebase 配置:
- 推特授权已启用
- api键组(检查了10次)
- api秘密集(一样东西)
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
希望对您有所帮助。
所以,经过一些挖掘,我找到了问题的答案。为了让它工作,我做了以下事情:
将 android 方案更改为 appname://
删除了 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>
将 Twitter 配置中的重定向 url 更改为 appname://
提升了对 Twitter 门户的访问权限
使用 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); }
完全没有使用firebase提供的回调(这个在README里也有提到,但是我懒得去查)