6

tôi muốn kiểm tra xem người dùng có đăng nhập hay không trong FragmentActivity chính nhưng mặc dù người dùng sẽ được đăng nhậpCách nhận mã thông báo truy cập hiện tại trong Facebook SDK Android V4?

AccessToken.getCurrentAccessToken()

lợi nhuận null. Tôi đang làm gì sai trong mã bên dưới?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    context = this;   
    FacebookSdk.sdkInitialize(context); 
    callbackManager = CallbackManager.Factory.create(); 
    AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
    if (accessToken != null) { 
     if (!accessToken.isExpired()) { 

     } 
    } 
} 
+0

bất kỳ giải pháp hay cách giải quyết về vấn đề này? Tôi có cùng một vấn đề ... :( – Sebi

Trả lời

0

Bạn có gọi Facebook SDK onActivityResult() từ hoạt động của bạn không? Tôi cũng gặp phải sự cố tương tự và được giải quyết bằng cách thêm cuộc gọi lại onActivityResult() này.

+0

Vâng, tôi đã gọi là 'onActivityResult' nhưng tôi vẫn nhận được giá trị null cho' AccessToken.getCurrentAccessToken() ' –

2

Người dùng đăng nhập như thế nào, thông qua LoginButton? Nếu vậy, nó sẽ xảy ra sau khi họ nhấp vào nút đăng nhập, vì vậy nơi bạn đang kiểm tra quá sớm.

Nếu họ đã đăng nhập, sau đó mã thông báo truy cập sẽ được deserialized từ đĩa, tuy nhiên đây là một hoạt động async để thread UI không bị chặn. Bạn kiểm tra nó ngay sau khi bạn khởi tạo Sdk, và hoạt động async có lẽ chưa hoàn thành. Tôi đề nghị bạn sử dụng AccessTokenTracker để trả lời khi AccessToken được tải. Dưới đây là mẫu sử dụng AccessTokenTracker để bạn tham khảo: https://github.com/facebook/facebook-android-sdk/blob/b384c0655fe96db71229bfdcb981a522f3f1e675/samples/Scrumptious/src/com/facebook/scrumptious/usersettings/UserSettingsFragment.java#L75

+0

Xin chào Gokhan, điều này không hiệu quả đối với tôi, xem http://stackoverflow.com/questions/30379616/how-to-get-current-facebook-access-token-on-app-start –

1

Android Facebook sdk Việc khởi tạo mất một khoảng thời gian Khởi tạo. vì vậy bạn cần phải chờ đợi chỉ 100 mili giây trước khi gọi AccessToken.getCurrentAccessToken()

một lần thử giải pháp này nó đang làm việc cho tôi

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    context = this; 
    FacebookSdk.sdkInitialize(context); 

    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 

      callbackManager = CallbackManager.Factory.create(); 
      AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
      if (accessToken != null) { 
       if (!accessToken.isExpired()) { 

       } 
      } 

     } 
    }, 100); 

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