Facebook登录失败,提示“出了点问题”。

6
我正在制作一款带有Facebook登录功能的应用程序。我已经让单独的登录工作了,但是现在将其与我的其他活动整合时,它无法登录。它显示错误消息“抱歉,出了些问题。我们正在努力修复”,然后我按下返回键,他正确地显示登录已被取消,所以我知道它只做到了这一步。有人能看出问题吗?我正在从家用电脑和笔记本电脑上处理同一项目。这是否会以某种方式使strings.xml中的Facebook ID出现问题?
MainActivity.java
package com.example.nan.spymap;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

public class MainActivity extends Activity {

    private CallbackManager callbackManager;

    private TextView info;
    private LoginButton loginButton;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();

        setContentView(R.layout.activity_main);



        setContentView(R.layout.activity_main);
        info = (TextView)findViewById(R.id.info);
        loginButton = (LoginButton)findViewById(R.id.login_button);

        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                startActivity(new Intent(MapActivity.this, MapActivity.class));

            }

            @Override
            public void onCancel() {
                info.setText("Login attempt cancelled.");
            }

            @Override
            public void onError(FacebookException e) {
                info.setText("Login attempt failed.");
            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

我的AndroidManifest文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.nan.spymap" >
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key" />
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <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" />
</application>

</manifest>

我的 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:padding="16dp"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/info"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:textSize="18sp"
        />

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        />

</RelativeLayout>

我的构建

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.nan.spymap"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
repositories { mavenCentral() }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.facebook.android:facebook-android-sdk:4.6.0'
    compile 'com.google.android.gms:play-services:7.8.0'
    compile 'com.android.support:appcompat-v7:22.0.1'
}

https://dev59.com/TV0b5IYBdhLWcg3wUP0X - Naveen Tamrakar
我不确定在那里要找什么,Naveen :/ - NicklasN
我注意到这个问题只在我使用一个新的用于测试的fb个人资料时出现...但是当我使用我的自己的fb个人资料时...它就正常工作了。 - penduDev
请有人帮忙,我也遇到了同样的问题。虽然今天早上登录又成功了一次,但之后又回到了错误信息。 - clementiano
4个回答

6

你的问题可能是由于你在loginButton.setPermissions("email", "public_profile", "user_friends")中发送的权限引起的。请确保使用有效的Facebook密钥。


1

对于尝试在Android应用程序中集成Facebook SDK的所有人来说,问题正在出现。 Facebook正在进行一些更新。 但对于已签名的APK文件,它可以正常工作。


1
这是我的keyhash,FB不允许在两台不同的开发机器上运行。在fb控制台上更改keyhash即可解决问题。

0

目前正在与完全相同的问题作斗争。

故障似乎在于已经存在的权限。如果用户已经授予Facebook应用程序权限,则在启动登录时,Facebook端会出现“出现错误”。撤销权限将使其工作一次,然后再次中断。

尚不确定如何永久修复此问题。 如果我找到任何东西,我会更新这个答案。

编辑1:

找到了一个丑陋的临时解决方案。仍在挖掘。它会破坏单点登录。

loginButton = ( LoginButton ) findViewById( R.id.login_button );
loginButton.setLoginBehavior( LoginBehavior.WEB_ONLY );

这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。一旦您拥有足够的声望,您还可以添加赏金以吸引更多关注此问题的人。 - Krzysztof Wolny
@KrzysztofWolny 这可能不是最好的答案,但它提供了一个临时解决方案,可以在Facebook修复他们的问题之前使用。我找不到其他方法使其在非签名apk上工作。感谢您在SO上的指导,我会注意的! - ABendrup
看到我的回答,我自己解决了问题。希望能对你有所帮助。 - NicklasN
在SO上有多篇与此相关的帖子,但没有一个描述正确的解决方案。是否有人有适当的工作解决方案? - nishant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接