2017-01-06 24 views
5

Tôi gặp sự cố lạ khi ghi nhật ký bằng cách sử dụng lớp LoginManager. Tôi đang gọi LoginManager.getInstance().logInWithReadPermissions(..) từ một đoạn để đăng nhập bằng các quyền cần thiết.Vấn đề đăng nhập SDK Facebook Android với phân tích cú pháp sdk

Tôi đã gỡ lỗi hết mức có thể và tôi nhận thấy mã yêu cầu gọi lại trả về onActivityResult hoạt động gốc của đoạn này là sai. Đoạn mã sau đây là từ lớp LoginManager đăng ký gọi lại để đăng nhập bằng một số mã yêu cầu.

... 
CallbackManagerImpl.registerStaticCallback(
       CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode(), 
       new CallbackManagerImpl.Callback() { 
       @Override 
       public boolean onActivityResult(int resultCode, Intent data) { 
        return LoginManager.this.onActivityResult(resultCode, data); 
       } 
       } 
    ); 
... 

Nhưng khi gọi hàm onActivityResult hoạt động không phải là CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode() nhưng có điều gì đó khác giống như gấp đôi. Ví dụ khi tôi đã cố gắng để gỡ lỗi và kiểm tra các giá trị đó là một cái gì đó như thế này:

CallbackManagerImpl.RequestCodeOffset.Login.toRequestCode() = 64206

requestCode nhận được trong lớp Hoạt động = 129742

và bây giờ vì điều này khi callbackManager cố gắng gọi onActivityResult như

callbackManager.onActivityResult (requestCode, resultCo de, data);

với yêu cầu nàyBấm không tìm thấy logincallback từ bản đồ để tiếp tục và dừng ngay tại đó. Tôi không biết tại sao nó xảy ra như tôi đang sử dụng ParseFacebookSDK và khi tôi đăng nhập với ParseFacebookUtils.logInWithReadPermissionsInBackground(..) nó hoạt động hoàn hảo. Sau đây là các phụ thuộc gradle.

... 
compile 'com.facebook.android:facebook-android-sdk:4.7.0' 
compile('com.parse:parse-android:1.13.0') { 
     exclude group: 'com.parse.bolts', 
       module: 'bolts-tasks' 
    } 
compile 'com.parse:parsefacebookutils-v4-android:[email protected]' 
... 

Nếu bạn có thể trợ giúp, sẽ được đánh giá cao. Cảm ơn.

UPDATE:

Nó làm việc cho tôi khi tôi đã cố gắng facebook đăng nhập từ hoạt động cha mẹ thay vì mảnh, nó trả lại mã yêu cầu đúng trong onActivityResult hoạt động thời gian này và nó chỉ đơn giản là làm việc. Điều này đã giải quyết được vấn đề của tôi nhưng vẫn muốn hiểu vấn đề với phân đoạn ở đây, vì vậy nếu bạn biết hãy chia sẻ suy nghĩ của bạn. Cảm ơn.

+0

xin vui lòng tránh việc sử dụng thư viện trong khi Facebook cung cấp khá nhiều SDK cho android. vì vì chúng tôi biết phân tích cú pháp đang trong quá trình phản đối. đó là một gợi ý cho bạn mà không sử dụng phân tích cú pháp. –

+1

tôi đang sử dụng phân tích cú pháp dưới dạng chương trình phụ trợ và đã di chuyển nó trên máy chủ ứng dụng chuyên dụng. – KunalK

Trả lời

3

Cố gắng gọi ParseFacebookUtils.logInWithReadPermissionsInBackground trong khi người dùng của bạn đã đăng nhập không chính xác và có thể đó là lý do bạn không nhận được cuộc gọi lại.

Chức năng chính xác để gọi nếu người dùng của bạn đã đăng nhập nhưng không được liên kết với Facebook là ParseFacebookUtils.linkWithReadPermissionsInBackground, có nghĩa là bạn muốn liên kết người dùng với facebook, không đăng nhập vào ứng dụng của bạn (vì anh ấy đã đăng nhập). Take a look in the docs for that.

+0

Ohkay hãy để tôi thử với điều đó. Cảm ơn vì sự trả lời. – KunalK

+0

Điều gì sẽ xảy ra trong trường hợp này khi người dùng khác đã đăng nhập bằng facebook trên thiết bị khác vì tài liệu cho biết __ "Các bước xảy ra khi liên kết rất giống với đăng nhập. Sự khác biệt là khi đăng nhập thành công, ParseUser hiện tại được cập nhật thông tin Facebook. Đăng nhập trong tương lai qua Facebook giờ đây sẽ đăng nhập người dùng vào tài khoản hiện có của họ. "__ – KunalK

+0

Đó là một câu hỏi khác. Câu trả lời có giải quyết được câu hỏi ban đầu của bạn không? –

2

Nếu bạn đang gọi LoginManager.getInstance().logInWithReadPermissions(..) từ một đoạn, sau đó mong đợi để nhận được mã yêu cầu đúng trong onActivityResult của đoạn, chứ không phải là hoạt động của onActivityResult.

Xem here. Các mảnh có phương thức 'onActivityResult` của riêng chúng. Họ không cần phải phụ thuộc vào một hoạt động cho điều đó.Không phải là nó tuyệt vời mà một cái gì đó mà không nhất thiết yêu cầu bất kỳ giao diện người dùng vẫn cung cấp phương pháp này của chính nó :)

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