Firebase Authentication (with twitter_login: ^4.0.1 and flutter_facebook_auth: ^4.0.1 respectively) in Flutter. I am getting errors in both the Authentication processes. I had also setup in Facebook Login and Twitter Login in developer account. Also went through many articles online but it seems none were working. After the recent updates.
error Message Received:
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}
The above message was from Facebook the below from 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.xmlfile.
<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 packages,
flutter_facebook_auth: 4.0.0
twitter_login: 4.0.1
firebase_auth: 3.3.5
firebase_core: 1.11.0
Facebook Sign-In:
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 Sign-In
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");
}
}
}
Problem Solved,
Twitter Solution:
(Went through twitter_login: ^4.0.1 documentation).
Replace the above with,
also replace the below snippet
with
and finally callback URL in twitter developer account should be,
Changed XML file:
as shown below:
Facebook Solution:
Get the client token as shown below:
App Dashboard -> Settings -> Advanced -> Security -> Client_Token (Your facebook client token)
Go to Project_Folder -> android -> app -> src -> main -> res -> values -> value.xml (create if not existing) and paste the below code.
Similarly, Go to Project_Folder -> android -> app -> src -> main -> res -> values -> value.xml (create if not existing) and paste the below code.
And also generate Hash Key from the below link:
Have to give
SHA1:as input. (courtesy tomeko.net and stackoverflow.com)