1

我正在用facebook idk为登录构建一个android应用程序。我已按照他们的入门指南和所有工作,但当我按下按钮屏幕闪烁并返回到登录活动。这是我的LoginActivity:Facebook登录按钮在按下后闪烁但未打开

protected void onCreate(Bundle savedInstanceState) { 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 

    loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("user_friends"); 


    // Callback registration 
    CallbackManager callbackManager =       CallbackManager.Factory.create(); 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() 

      { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        Log.d(TAG_FACEBOOK, "Success!"); 
        Log.d(TAG_FACEBOOK, loginResult.toString()); 
       } 

       @Override 
       public void onCancel() { 
        Log.d(TAG_FACEBOOK, "Cancel"); 
       } 

       @Override 
       public void onError(FacebookException exception) { 
        Log.d(TAG_FACEBOOK, "Error"); 
       } 
      } 

    ); 

我的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".LoginActivity"> 

<TextView android:text="Hello World!" android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<com.facebook.login.widget.LoginButton 
    android:id="@+id/login_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal" 
    android:layout_marginTop="30dp" 
    android:layout_marginBottom="30dp" /> 


</RelativeLayout> 

有人可以帮助请?

+0

检查此.. http://stackoverflow.com/questions/33139932/how-to-get-email-id-from-android-facebook-sdk-4-6-0/33185769#33185769 – Destro

+0

它didn'帮助:/问题是,Facebook的提示从不出现。他闪烁,但返回到登录活动 – BCasaleiro

+0

您是否成功登录或没有..你发现任何错误 – Destro

回答

0

原来有一个在Facebook的应用程序配置问题,管理员无法测试自己的应用程序,所以我搬到自己开发,这一切开始工作

0

你缺少onActivityResult,你应该做这个

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

    myFacebookCallbackManager.onActivityResult(requestCode, resultCode, data); 
} 

我希望你在清单中提到了facebbook元数据和活动名称。 也有权限,比如说说

<uses-permission android:name="android.permission.INTERNET" /> 
0

我有同样的问题。最终以这种方式解决:

  • 在Facebook开发者上创建Android应用程序,并将其设置为public而不是开发模式。

  • 清单:

    <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"/> 
    
  • 的strings.xml

    XXXXXXXXXXXXXX

  • 如果你想使用片段进行登录的正确方法是:

第1步:

CallbackManager mCallbackManager; 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 

     mCallbackManager = CallbackManager.Factory.create(); 

     LoginManager.getInstance().registerCallback(mCallbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        // App code 
        Log.e("Success", "Login"); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id, first_name, last_name ,email, gender, birthday"); 

        GraphRequest gr = GraphRequest.newMeRequest(
          loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
           @Override 
           public void onCompleted(JSONObject json, GraphResponse response) { 
            if (response.getError() != null) { 
             // handle error 
             System.out.println("ERROR "+response.getError().toString()); 
            } else { 
             //System.out.println("Success"); 
             try { 

              String jsonresult = String.valueOf(json); 
              System.out.println("JSON Result"+jsonresult); 
              String resp = String.valueOf(response.getJSONObject()); 
              System.out.println("JSON resp "+resp); 


             } catch (JSONException e) { 
              e.printStackTrace(); 
             } 
            } 
           } 

          }); 
        gr.setParameters(parameters); 
        gr.executeAsync(); 

       } 

       @Override 
       public void onCancel() { 
        // App code 
        Log.e("onCancel", "Login"); 
       } 

       @Override 
       public void onError(FacebookException onError) { 
        // App code 
        Log.e("onError", "Login "+onError.getMessage()); 
       } 
      }); 
    } 

第2步:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 
      mCallbackManager.onActivityResult(requestCode, resultCode, data); 
     } 
    } 

步骤3: - 内OnClickListener

LoginManager.getInstance().logInWithReadPermissions(YourFragment.this, Arrays.asList("public_profile")); 

我用getActivity()也正因为如此,每次闪烁的东西而不是显示的Facebook登录视图。基本上,而不是getActivity()必须使用FragmentClaseName.this。我希望这会对你有所帮助。快乐编码!