Câu hỏi thường gặp và khắc phục sự cố về Facebook SDK dành cho iOS

Bạn có thể sử dụng một ID ứng dụng Facebook trong nhiều ứng dụng iOS, ví dụ: giữa phiên bản miễn phí và trả phí của ứng dụng.

Hãy xác định thông số hậu tố lược đồ URL, FacebookUrlSchemeSuffix, trong tệp .plist của ứng dụng.

Lưu ý: Hậu tố chỉ hoạt động với ký tự bằng chữ.

Tệp zip SDK bao gồm một FacebookSDKStrings.bundle chứa các chuỗi được bản địa hóa cho tài nguyên SDK. Hãy đưa gói này vào ứng dụng của bạn và bật Quốc tế hóa cơ sở theo mô tả trong tài liệu của Apple.

Vì hộp thoại chia sẻ gốc là một phần trong ứng dụng iOS của Facebook nên bạn không thể chạy hộp thoại này trên trình mô phỏng. Hãy sử dụng thiết bị vật lý để thử nghiệm hộp thoại chia sẻ gốc. Chúng tôi đang xem xét các cách để giúp có thể thử nghiệm hộp thoại chia sẻ gốc trong trình mô phỏng.

Hãy đảm bảo rằng bạn có lệnh nhập chính xác ở đầu mỗi tệp khi cố gắng sử dụng các lớp SDK Facebook. Ví dụ:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

Khi sử dụng các khung trong Objective-C, các lớp sử dụng danh mục để mở rộng các lớp hiện có không được tải tự động.

Khi cố gắng gọi phương thức đã được mở rộng trong các lớp này, bạn sẽ gặp phải lỗi unrecognized selector sent to instance. Các lớp được sử dụng từ trình tạo giao diện Xcode cũng không được tải tự động, chẳng hạn như khi bạn thêm FBSDKLoginButton vào giao diện của mình bằng cách xem tệp .xib rồi đặt tệp đó là FBSDKLoginButton từ UI trình tạo giao diện. Tương tự như vậy, khi bạn cố gắng gọi phương thức trên các lớp đó, bạn sẽ gặp phải lỗi unrecognized selector sent to instance. Để giải quyết sự cố này, bạn có hai tùy chọn.

Bạn có thể tải lớp này theo cách thủ công trong application:didFinishLaunchingWithOptions: của ủy quyền ứng dụng bằng cách gọi:

[FBSDKLoginButton class];

Ngoài ra, bạn có thể thêm cờ trình liên kết -ObjC. Cờ này cho trình liên kết biết cần tải mọi tệp đối tượng trong SDK định nghĩa danh mục hoặc lớp Objective-C. Phương pháp này sẽ giúp tất cả các lớp của chúng tôi hoạt động ngay tức thì nhưng sẽ làm tăng kích thước của tệp thực thi (do có thêm mã đối tượng được tải vào ứng dụng).

Để thêm cờ -ObjC, hãy nhấp vào mục tiêu dự án rồi chọn tab "Cài đặt bản dựng". Tại đó, trong "Liên kết", nhấp đúp vào "Các cờ trình liên kết khác" để thêm -ObjC.

FBSDKRequestConnection sử dụng NSURLConnection, kết nối này yêu cầu có RunLoop hoạt động. Nếu đang sử dụng kết nối bên ngoài chuỗi chính thì bạn phải tự quản lý kết nối này.

Ngoài ra, bạn có thể đặt thuộc tính delegateQueue trên FBSDKRequestConnection.

.plist thường bị lỗi cấu hình. Hãy đảm bảo .plist có hàng để nhập FacebookAppID, FacebookDisplayName và Loại URL dành cho fb{app-id}.

Nếu bạn nhận được kết quả không mong muốn khi tạo yêu cầu API Đồ thị, hãy bật chế độ gỡ lỗi bằng cách thêm mã này vào trước mọi yêu cầu:

[FBSettings setLoggingBehavior:
    [NSSet setWithObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]];

Hãy sử dụng FBSDKLoggingBehaviorGraphAPIDebugWarning nếu bạn muốn chặn thông báo ở cấp độ thông tin và chỉ giữ lại cảnh báo.

Việc cho phép hoạt động ghi này sẽ thêm thông số debug vào tất cả các yêu cầu API Đồ thị và cung cấp mọi sự cố xảy ra trong bảng điều khiển.

Bạn có thể đọc thêm về Chế độ gỡ lỗi API Đồ thị tại đây.

SDK sẽ báo cáo hủy nếu người dùng nhấn dứt khoát vào nút hủy trong hộp thoại đăng nhập hoặc nếu họ chuyển đổi ứng dụng về ứng dụng của bạn (được gọi là hủy ngầm định) theo cách thủ công. Bạn cần đảm bảo rằng mình không khởi tạo luồng đăng nhập như một phần trong vòng đời của ủy quyền ứng dụng (chẳng hạn như bắt đầu đăng nhập bên trong application:openURL:sourceApplication:annotation:) vì điều đó giống với thao tác hủy ngầm định. Nếu bắt buộc, hãy gửi khởi tạo đăng nhập sau vào hàng đợi chính để vòng đời của ủy quyền ứng dụng hoàn tất trước.

  • SDK Facebook sử dụng mã để truy cập Mã số nhận dạng quảng cáo của Apple (IDFA) nhưng mã đó chỉ được thực thi trong một số tình huống.
  • SDK Facebook dành cho iOS chỉ truy cập IDFA trong những tình huống sau: 1) nếu ứng dụng của bạn phân phối quảng cáo bên trong ứng dụng thông qua Facebook [Audience Network] (/products/audience-network/) hoặc 2) nếu ứng dụng của bạn ghi số lượt cài đặt ứng dụng hoặc Sự kiện trong ứng dụng di động khác để ghi nhận những sự kiện đó cho chiến dịch quảng cáo của bạn. Nếu bạn không ghi Sự kiện trong ứng dụng (thông qua lớp FBSDKAppEvents) thì SDK Facebook sẽ không truy cập IDFA. Ngoài ra, SDK Facebook không yêu cầu bao gồm AdSupport.framework.
  • Nếu bạn muốn theo dõi Sự kiện trong ứng dụng mà không thu thập IDFA, bạn có thể tắt tính năng thu thập IDFA trong bảng điều khiển ứng dụng trong phần cài đặt nâng cao.

Hộp thoại Chia sẻ thông báo phương thức sharer:didCompleteWithResults:sharerDidCancel: của ủy quyền khi người dùng hành động.

  • sharer:didCompleteWithResults: khi người dùng chia sẻ thành công. Ngoài ra, cũng sẽ có khóa postId trong từ điển results nếu người dùng cấp quyền publish_actions cho ứng dụng. Nếu người dùng đó chưa đăng nhập bằng Đăng nhập Facebook thì phương thức này cũng sẽ được gọi nếu người dùng nhấp vào Cancel.
  • sharerDidCancel: khi ai đó nhấp vào nút X của hộp thoại Chia sẻ hoặc nếu họ đã đăng nhập bằng Đăng nhập Facebook và nhấp vào Cancel.

Nếu bạn nhận được kết quả không mong muốn khi tạo yêu cầu, hãy bật gỡ lỗi cho FBSDKGraphRequests. Thêm mã này trước mọi yêu cầu:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Bạn sẽ có thể gỡ lỗi mọi vấn đề bằng cách xem yêu cầu và phản hồi ngay từ máy chủ.

Cân nhắc xem xét các hằng số FBSDKLoggingBehavior* khác được định nghĩa trong FBSDKSettings.h cho những nội dung khác mà bạn có thể ghi.