Android FacebookException:登录尝试失败
Android FacebookException : Login attempt failed
我正在使用 ParseFacebookUtils 从 Facebook 登录我的应用程序。
LoginActivity 的 onCreate:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginButton = (Button)findViewById(R.id.loginButton);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this,
Arrays.asList("public_profile", "email", "user_photos", "user_birthday"),
new LogInCallback() {
@Override
public void done(ParseUser user, ParseException e) {
if (user == null) {
Log.d(TAG, "Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.d(TAG, "User signed up and logged in through Facebook!");
} else {
Log.d(TAG, "User logged in through Facebook!");
}
}
}
);
}
});
}
应用程序class onCreate:
public void onCreate() {
super.onCreate();
Parse.initialize(this, app_id, client_key);
FacebookSdk.sdkInitialize(getApplicationContext());
ParseFacebookUtils.initialize(getApplicationContext());
}
崩溃错误:
com.facebook.FacebookException: Log in attempt failed: LoginActivity could not be started
at com.facebook.login.LoginManager.startLogin(LoginManager.java:382)
at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:262)
at com.parse.FacebookAuthenticationProvider.authenticateAsync(FacebookAuthenticationProvider.java:150)
at com.parse.ParseAuthenticationProvider.logInAsync(ParseAuthenticationProvider.java:57)
at com.parse.ParseFacebookUtils.logInAsync(ParseFacebookUtils.java:259)
at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:155)
at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:167)
at com.example.app.LoginActivity.onClick(LoginActivity.java:48)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我在点击登录按钮时总是出现上述崩溃。
关于如何解决这个问题有什么想法吗?
我已经在 strings.xml
中设置了 Facebook 和 Parse 的客户端 ID
更新:
Facebook SDK v4.0.1
自定义按钮 onClick()
您需要为按钮注册回调才能使用它:
1.Declare 一个 CallbackManager 对象:
CallbackManager callbackManager;
2。在您的 onCreate 方法中添加:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_login);
...
}
3。定义 onActivityResult 并添加此行:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Esto es necesario para el uso del botón de facebook
callbackManager.onActivityResult(requestCode, resultCode, data);
}
通过在 AndroidManifest.xml 中添加以下内容来修复它:
<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
根据,Facebook SDK 4.+需要以上内容。
@kRiZ: Yes.you 忘记添加 com.facebook.FacebookActivity
activity 到 AndroidManifest.xml.
此 Activity 是整个 Facebook SDK 的必要组成部分,但不能直接使用。将此 Activity 添加到您的 AndroidManifest.xml 以确保正确处理 Facebook SDK 功能。
Reference 要使用 Facebook 登录或分享,还要将 FacebookActivity 添加到清单中:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
和
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
其中 @string/facebook_app_id
是您的 Facebook 应用程序 ID。
这就是 facebook 授权 流程的运作方式。
我正在使用 ParseFacebookUtils 从 Facebook 登录我的应用程序。
LoginActivity 的 onCreate:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginButton = (Button)findViewById(R.id.loginButton);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ParseFacebookUtils.logInWithReadPermissionsInBackground(LoginActivity.this,
Arrays.asList("public_profile", "email", "user_photos", "user_birthday"),
new LogInCallback() {
@Override
public void done(ParseUser user, ParseException e) {
if (user == null) {
Log.d(TAG, "Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.d(TAG, "User signed up and logged in through Facebook!");
} else {
Log.d(TAG, "User logged in through Facebook!");
}
}
}
);
}
});
}
应用程序class onCreate:
public void onCreate() {
super.onCreate();
Parse.initialize(this, app_id, client_key);
FacebookSdk.sdkInitialize(getApplicationContext());
ParseFacebookUtils.initialize(getApplicationContext());
}
崩溃错误:
com.facebook.FacebookException: Log in attempt failed: LoginActivity could not be started
at com.facebook.login.LoginManager.startLogin(LoginManager.java:382)
at com.facebook.login.LoginManager.logInWithReadPermissions(LoginManager.java:262)
at com.parse.FacebookAuthenticationProvider.authenticateAsync(FacebookAuthenticationProvider.java:150)
at com.parse.ParseAuthenticationProvider.logInAsync(ParseAuthenticationProvider.java:57)
at com.parse.ParseFacebookUtils.logInAsync(ParseFacebookUtils.java:259)
at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:155)
at com.parse.ParseFacebookUtils.logInWithReadPermissionsInBackground(ParseFacebookUtils.java:167)
at com.example.app.LoginActivity.onClick(LoginActivity.java:48)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我在点击登录按钮时总是出现上述崩溃。
关于如何解决这个问题有什么想法吗?
我已经在 strings.xml
中设置了 Facebook 和 Parse 的客户端 ID更新:
Facebook SDK v4.0.1
自定义按钮 onClick()
您需要为按钮注册回调才能使用它:
1.Declare 一个 CallbackManager 对象:
CallbackManager callbackManager;
2。在您的 onCreate 方法中添加:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_login);
...
}
3。定义 onActivityResult 并添加此行:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Esto es necesario para el uso del botón de facebook
callbackManager.onActivityResult(requestCode, resultCode, data);
}
通过在 AndroidManifest.xml 中添加以下内容来修复它:
<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
根据
@kRiZ: Yes.you 忘记添加 com.facebook.FacebookActivity
activity 到 AndroidManifest.xml.
此 Activity 是整个 Facebook SDK 的必要组成部分,但不能直接使用。将此 Activity 添加到您的 AndroidManifest.xml 以确保正确处理 Facebook SDK 功能。
Reference 要使用 Facebook 登录或分享,还要将 FacebookActivity 添加到清单中:
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
和
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
其中 @string/facebook_app_id
是您的 Facebook 应用程序 ID。
这就是 facebook 授权 流程的运作方式。