2015-09-08 160 views
1

我正在使用ParseFacebookUtils從Facebook登錄到我的應用程序。Android FacebookException:登錄嘗試失敗

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!"); 
          } 
         } 
        } 
      ); 
     } 
    }); 
} 

應用類的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$1.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) 

我不斷收到上述碰撞登錄按鈕攻時。

有關如何解決此問題的任何想法?

我已經設置了客戶端ID爲Facebook和在strings.xml中解析

UPDATE:

的Facebook SDK V4.0.1

自定義按鈕的onClick()

回答

2

通過添加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" /> 

根據this SO post,以上是Facebook SDK 4. +所需要的。

+0

是你是真的 –

0

你需要註冊按鈕的回調,然後才能使用它:

1.Declare a CallbackManage ř對象:

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); 
} 
+0

沒有工作,對不起。 '無法找到com.facebook.katana.provider.AttributionIdProvider的提供者信息' – kRiZ

+0

您的錯誤是由於您的應用程序錯誤地配置了Facebook,而不是登錄。拿起這篇文章,也許你可以找到解決方案:http://stackoverflow.com/questions/25698419/android-failed-to-find-provider-info-for-com-facebook-wakizashi-provider-platf –

3

@kRiZ:Yes.you忘了com.facebook.FacebookActivity活動添加到AndroidManifest.xml中

此活動是整個Facebook SDK的必要組成部分,但不打算直接使用。將此活動添加到您的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授權過程將工作。

enter image description here

+1

是的,謝謝。這是從SDK的v4。+開始的新功能,我想呢? – kRiZ

+0

@kRiZ是的先生。 –