2013-06-20 28 views
7

Tôi tạo một ACAccountStore, truy cập vào tài khoản facebook của người dùng, lưu trữ tài khoản trong đối tượng ACAccount và có thể truy xuất mã thông báo từ thông tin đăng nhập. Nhưng khi tôi thử và sử dụng mã thông báo này để truy xuất thông tin từ Facebook, nó sẽ không xác thực và cố gắng gia hạn bằng chứng xác thực bằng cách sử dụng renewCredentialsForAccount sẽ chỉ phản hồi là ACAccountCredentialRenewResultRejected.Cách xử lý thông báo "ACAccountCredentialRenewResultRejected" khi gọi renewCredentialsForAccount

Tôi không thể nhận được quyền bật lên để hiển thị lại để yêu cầu quyền bằng bất kỳ phương tiện dễ dàng nào. Cách duy nhất tôi có thể nhận được nó để yêu cầu sự cho phép một lần nữa là thay đổi quyền mà tôi yêu cầu trong ứng dụng, hoặc để xóa và thêm lại tài khoản facebook của tôi trong cài đặt.

Tôi làm cách nào để nhận mã thông báo xác thực hợp lệ tại thời điểm này?

+0

Tôi có thể tạo lại cùng lỗi này bằng cách xóa ứng dụng khỏi trang cài đặt ứng dụng của tôi trên facebook. Có vẻ như nó chỉ cần yêu cầu quyền pop-up để xảy ra một lần nữa để có được sự cho phép của người dùng, nhưng nó sẽ không bật lên cho đến khi tôi đăng xuất/vào trên điện thoại của mình. – ZachLHelms

+0

Dường như, khi thực hiện cuộc gọi 'renewCredentialsForAccount' thì lần sau tôi khởi chạy ứng dụng và thử đăng nhập, tôi được nhắc cấp quyền cho ứng dụng.Trong khi nếu tôi không thực hiện cuộc gọi đó, tôi sẽ không bao giờ được nhắc làm điều đó. – ZachLHelms

+0

Cùng một vấn đề ở đây. Dễ tái sản xuất: 1) cấp quyền một lần cho ứng dụng 2) mà không cần thoát khỏi FB explorer và xóa tất cả các quyền 3) thử renewCredentialsForAccount. Có ai đã tìm ra giải pháp cho việc này không? FB api có một closeSessionsAndToken (hoặc tương tự) giải quyết vấn đề này. Nhưng những gì về xã hội api? – Teddy

Trả lời

3

Vì không có câu trả lời được chấp nhận, tôi cố gắng trả lời những gì tôi đã tìm thấy. Sau khi nhận xét của tôi ở trên, tôi đọc tài liệu về số renewCredentialsForAccount cho biết "Nếu người dùng đã hủy cấp phép ứng dụng của bạn, yêu cầu gia hạn này sẽ trả về ACAccountCredentialRenewResultRejected".

Điều gây nhầm lẫn là không phải người dùng từ chối mà là Facebook.

Tôi nghĩ rằng tôi đã hiểu khái niệm ngay bây giờ và tôi cố gắng trả lời những người thất bại với vấn đề này như tôi. Trong thực tế những gì tôi đã không nhận ra là mã thông báo FB của tôi sẽ được đặt lại hoàn toàn khi tôi nhận được kết quả ACAccountCredentialRenewResultRejected. Và đó là yếu tố then chốt trong câu đố.

Vì vậy, những gì bạn cần để làm cho kết quả khác nhau:

  • ACAccountCredentialRenewResultRenewed bạn là tốt để đi và bạn có một thẻ mới. Đi và thực hiện SLRequest của bạn với mã thông báo mới này.
  • ACAccountCredentialRenewResultRejected: thẻ của bạn là thiết lập lại, nếu bạn cố gắng để có được một trong nó sẽ là một con số không . Bạn phải yêu cầu quyền từ người dùng từ đầu và "cài đặt" ứng dụng cho Facebook. Điều đó có nghĩa là bạn đặt câu hỏi đầu tiên cho "email + các quyền đọc khác" thông thường và (nếu bạn cần) trong một yêu cầu riêng, bạn yêu cầu quyền ghi. (Ai đó có thể giải thích tại sao Facebook muốn tôi làm phiền người dùng hai lần nếu tôi muốn tải lên ảnh chẳng hạn)
  • ACAccountCredentialRenewResultFailed: Tôi không thể tái tạo điều này bao giờ hết. Tôi tin ở đây bạn thả một thông báo lỗi cho người dùng.

Đây là những gì tôi nghĩ ra. Đó là một API rất khó chịu có tài liệu kém và các mẫu bị thiếu. Ngoài ra các ví dụ trên Internet là về "Thành công" và họ không quan tâm đến thực tế là người dùng có thể thu hồi quyền bên ngoài ứng dụng. Tôi đang thử liên tục chế độ phát triển không thành công &. Mất mái tóc màu xám nhưng đến cuối cùng. Tôi hy vọng phản ứng của tôi sẽ giúp người khác.

+0

rất hữu ích và giải thích chi tiết, ngón tay cái lên! –