无法通过按钮登录安卓应用facebook。
在模拟器上,登录没问题。点击按钮后,出现输入登录名和密码的表格,输入数据并点击“登录”。将打开第二个窗口,其中显示“您以前使用此帐户登录过,您想继续吗?” 我单击继续,然后我从服务器收到带有数据的响应。
在真实设备上,当您单击按钮时,会打开一个用于在 facebook 中输入登录名和密码的表单。
我输入我的用户名和密码,然后单击“登录”按钮。
但点击后,按钮闪烁,没有其他反应。反复点击是没有用的。窗户本身并没有冻结。单击后控制台中不会出现错误。
AndroidStudio 日志中的最后几行:
2020-06-22 13:03:48.252 1603-1603/com.example.buttonlogintest I/Timeline: Timeline: Activity_launch_request time:3019160 intent:Intent { cmp=com.example.buttonlogintest/com.facebook.CustomTabMainActivity (has extras) }
2020-06-22 13:03:48.279 1603-1603/com.example.buttonlogintest I/Timeline: Timeline: Activity_launch_request time:3019187 intent:Intent { act=android.intent.action.VIEW dat=https://m.facebook.com/... flg=0x40000000 pkg=com.android.chrome (has extras) }
清单代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.buttonlogintest">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:screenOrientation="portrait"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:replace="android:icon">
<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=".MainActivityLoginFB">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
活动代码:
package com.example.buttonlogintest;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import androidx.appcompat.app.AppCompatActivity;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginBehavior;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import java.util.Arrays;
public class MainActivityLoginFB extends AppCompatActivity implements View.OnClickListener {
CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_fb_btn);
ImageButton loginImgBtn = (ImageButton) findViewById(R.id.buttonLoginFB);
loginImgBtn.setOnClickListener(this);
initFacebookSdk();
}
public void initFacebookSdk() {
Log.e("MYTAG", "InComeActivity. initFacebookSdk");
// FacebookSdk.sdkInitialize(this);
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("MYTAG", "Login");
Log.d("MYTAG", "Facebook getUserId: " + loginResult.getAccessToken().getUserId());
}
@Override
public void onCancel() {
Log.e("MYTAG", "InComeActivity. initFacebookSdk: onCancel");
}
@Override
public void onError(FacebookException exception) {
Log.e("MYTAG", "InComeActivity. initFacebookSdk: onError");
}
});
}
@Override
public void onClick(View view) {
LoginManager loginManager = LoginManager.getInstance();
loginManager.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
loginManager.logInWithReadPermissions(this, Arrays.asList("email"));
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
}
标记代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.buttonlogintest.MainActivity">
<ImageButton
android:id="@+id/buttonLoginFB"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="32dp"
android:elevation="4dp"
android:padding="4dp"
android:scaleType="fitXY"
android:src="@drawable/ic_fb_logo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
在生产应用程序上的行为相同。发布版本的开发版本 - 不适用于真实设备,但在模拟器上 - 它们可以工作。
如何解决这个问题呢?
















