2016-01-08 19 views
5

Tôi đang cố gắng triển khai đăng nhập facebook đơn giản trên ứng dụng Android của mình. Khi tôi nhấp vào nút đăng nhập, ứng dụng được chuyển hướng đến trang facebook, sau khi nhập thông tin đăng nhập, nó lại được trả về ứng dụng của tôi. Nhưng các hàm callbacks LoginButton không được gọi. Mặc dù có một số câu hỏi tương tự như vậy, nhưng họ có một lớp phân đoạn riêng biệt. Tuy nhiên, tôi đang làm mọi thứ từ Hoạt động chính. Sau đây là mã của tôi:Facebook LoginButton callback không được gọi là

package com.example.ankur.facebookdemo; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Toast; 

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 AppCompatActivity { 
    private LoginButton loginButton; 
    CallbackManager callbackManager; 

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

     loginButton = (LoginButton) findViewById(R.id.login_button); 
     if (loginButton == null) { 
      Log.v("CheckLogin", "null"); 
     } 
     else { 
      Log.v("CheckLogin", "not null"); 
     } 


     loginButton.setReadPermissions("user_friends"); 

     loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       // App code 
       Toast.makeText(getApplicationContext(),"Fb Login Success", Toast.LENGTH_LONG); 
       Log.v("CheckLogin", "successfully connected to facebook"); 
      } 

      @Override 
      public void onCancel() { 
       // App code 
       Toast.makeText(getApplicationContext(),"Fb on cancel",Toast.LENGTH_LONG); 
       Log.v("CheckLogin", " connection to facebook cancelled"); 

      } 

      @Override 
      public void onError(FacebookException exception) { 
       // App code 
       Toast.makeText(getApplicationContext(),"Fb Login Error",Toast.LENGTH_LONG); 
       Log.v("CheckLogin", "Error on connection to facebook"); 
      } 
     }); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

với những gì xây dựng sự phụ thuộc của SDK của FB ?? exmpl: facebookSDK = 'com.facebook.android:facebook-android-sdk:4.6.0' –

Trả lời

10

Bạn quên ghi đè phương thức onActivityResult(). onActivityResult() kết quả trong các phương thức gọi lại được gọi.

Làm như thế này:

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

Hope this helps! All the best :)

+0

Cảm ơn rất nhiều! Nó đã khắc phục được vấn đề. –

+0

Xin chào Narayan, tôi có một vấn đề khác bây giờ với callbacks. Mã lệnh gọi hàm onSuccess trên thành công, nhưng khi tôi nhấn vào nút đăng xuất, lệnh onCancel không được gọi. Tôi đã đặt câu hỏi đó vào một câu hỏi khác ở đây: http://stackoverflow.com/questions/34978263/facebook-sdk-android-onsuccess-called-but-oncancel-not-called –

2

Bạn đang thiếu onActivityResult móc:

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

The documentation nêu rõ rằng:

Mọi hoạt động và đoạn mà bạn tích hợp với FacebookSDK Đăng nhập hoặc chia sẻ nên forward onActivityResult đến callbackManager.

+0

Cảm ơn rất nhiều! Nó đã khắc phục được vấn đề. –

+0

các dữ liệu trả về với các tính năng bổ sung có ý định như là một kiện bưu kiện trong bưu kiện là gì? – JPM

Các vấn đề liên quan