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。我希望這會對你有所幫助。快樂編碼!