คำถามที่พบบ่อยและการแก้ปัญหาเกี่ยวกับ SDK สำหรับ iOS ของ Facebook

คุณสามารถใช้ ID แอพบน Facebook เดียวในแอพ iOS ต่างๆ ได้ เช่น ระหว่างแอพในเวอร์ชั่นฟรีและเวอร์ชั่นชำระเงินของคุณ

กำหนดพารามิเตอร์ต่อท้ายแผน URL FacebookUrlSchemeSuffix ในไฟล์ .plist ของแอพของคุณ

หมายเหตุ: คำต่อท้ายใช้ได้กับอักขระตัวอักษรเท่านั้น

SDK zip มี FacebookSDKStrings.bundle ที่มีสตริงที่แปลเป็นภาษาท้องถิ่นแล้วสำหรับทรัพยากร SDK ให้รวมชุดลงในแอพของคุณแล้วเปิดใช้งาน Base Internationalization ตามที่ระบุในเอกสารของ Apple

เนื่องจากกล่องโต้ตอบแชร์แบบเนทีฟเป็นส่วนหนึ่งของแอพ iOS ของ Facebook จึงไม่สามารถเรียกใช้บนโปรแกรมจำลองได้ ใช้อุปกรณ์จริงในการทดสอบกล่องโต้ตอบแชร์แบบเนทีฟ เรากำลังหาวิธีในการทำให้สามารถทดสอบในกล่องโต้ตอบการแชร์รูปแบบเนทีฟบนโปรแกรมจำลองได้

ตรวจสอบให้แน่ใจว่าคุณข้อความนำเข้าที่ถูกต้องที่ด้านบนสุดของไฟล์แต่ละไฟล์ที่คุณกำลังพยายามใช้คลาส Facebook SDK ตัวอย่างเช่น

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

เมื่อใช้เฟรมเวิร์กใน Objective-C คลาสที่ใช้หมวดหมู่เพื่อขยายคลาสที่มีอยู่เดิมไม่ถูกโหลดโดยอัตโนมัติ

เมื่อคุณพยายามเรียกวิธีที่ได้รับการขยายในคลาสเหล่านี้ คุณจะได้รับข้อผิดพลาด มีการส่งตัวเลือกที่ไม่รู้จักไปยังอินสแตนซ์ คลาสที่ใช้จากตัวสร้างอินเทอร์เฟซ Xcode จะไม่โหลดโดยอัตโนมัติ ตัวอย่างเช่น เมื่อคุณเพิ่ม FBSDKLoginButton ในอินเทอร์เฟซของคุณโดยการวาดมุมมองในไฟล์ .xib ของคุณ แล้วตั้งค่าเป็น FBSDKLoginButton จาก UI ตัวสร้างอินเทอร์เฟซ ดังนั้น เมื่อคุณพยายามเรียกวิธีการเหล่านี้ คุณจะได้รับข้อผิดพลาด มีการส่งตัวเลือกที่ไม่รู้จักไปยังอินสแตนซ์ ในการแก้ไขปัญหานี้ คุณมีสองตัวเลือก

คุณสามารถโหลดคลาสด้วยตนเองใน application:didFinishLaunchingWithOptions: ของตัวแทนของแอพของคุณ โดยเรียก:

[FBSDKLoginButton class];

หรือคุณสามารถเพิ่มแฟล็กตัวลิงก์ -ObjC แฟล็กนี้จะบอกให้ตัวลิงก์โหลดไฟล์ทุกอ็อบเจ็กต์ใน SDK ที่กำหนดคลาส Objective-C หรือหมวดหมู่ วิธีนี้จะทำให้คลาสของเราทั้งหมดใช้งานได้ตั้งแต่เริ่มต้น แต่จะเพิ่มขนาดของไฟล์ที่สามารถดำเนินการได้ (เนื่องจากมีรหัสอ็อบเจ็กต์เพิ่มเติมที่โหลดเข้าไปในแอพพลิเคชั่น)

ในการเพิ่มแฟล็ก -ObjC ให้คลิกเป้าหมายโปรเจ็กต์ แล้วเลือกแท็บ "การตั้งค่าบิลด์" ที่จุดนี้ ภายใต้ “การเชื่อมโยง” ให้คลิกสองครั้งที่ “แฟล็กตัวลิงก์อื่นๆ” เพื่อเพิ่ม -ObjC

FBSDKRequestConnection จะใช้ NSURLConnection ซึ่งจะต้องมี [RunLoop] ที่ใช้งานอยู่ (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html) ถ้าคุณกำลังใช้นอกเธรดหลัก คุณต้องจัดการด้วยตัวคุณเอง

หรืออีกวิธีหนึ่ง คุณสามารถตั้งค่าคุณสมบัติ delegateQueue บน FBSDKRequestConnection

เป็นเรื่องปกติที่จะมีข้อผิดพลาดในการกำหนดค่าใน .plist ตรวจสอบว่า .plist มีแถวสำหรับ FacebookAppID และ FacebookDisplayName และรายการประเภท URL สำหรับ fb{app-id}

ถ้าคุณได้รับผลลัพธ์ที่ไม่คาดคิดเมื่อทำการร้องขอ API กราฟ ให้เปิดใช้งานโหมดแก้ไขจุดบกพร่องโดยการเพิ่มโค้ดนี้ก่อนส่งคำขอใดๆ:

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

ใช้ FBSDKLoggingBehaviorGraphAPIDebugWarning หากคุณต้องการระงับข้อความระดับข้อมูลและเก็บเฉพาะคำเตือน

การเปิดใช้งานลักษณะการบันทึกนี้จะเพิ่มพารามิเตอร์ debug ทั้งหมดในคำขอ API กราฟ และค่าที่แสดงใดๆ ที่เกิดขึ้นเกี่ยวกับปัญหาในคอนโซล

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับโหมดแก้ไขจุดบกพร่องของ API กราฟได้[ที่นี่] (/docs/graph-api/using-graph-api/v2.3#debugging)

SDK จะรายงานการยกเลิก หากผู้ใช้แตะที่ปุ่มยกเลิกในข้อความโต้ตอบเพื่อเข้าสู่ระบบโดยชัดแจ้ง หรือหากมีการสลับแอพด้วยตนเองกลับไปที่แอพของคุณ (หรือที่เรียกว่าการยกเลิกโดยนัย) คุณควรตรวจสอบให้แน่ใจว่าคุณไม่ได้กำลังเริ่มต้นลำดับขั้นตอนการเข้าสู่ระบบโดยเป็นส่วนหนึ่งของวงจรชีวิตของตัวแทนแอพของคุณ (เช่น การเริ่มต้นการเข้าสู่ระบบใน application:openURL:sourceApplication:annotation:) เพราะจะเป็นการเลียนแบบการยกเลิกโดยนัย หากคุณจะต้องทำเช่นนั้น ให้จัดส่งการเริ่มต้นการเข้าสู่ระบบในภายหลังไปที่คิวหลัก เพื่อให้วงจรชีวิตของตัวแทนแอพเสร็จสมบูรณ์ก่อน

  • Facebook SDK มีรหัสเพื่อเข้าถึงตัวระบุโฆษณาของ Apple (IDFA) แต่รหัสดังกล่าวจะถูกดำเนินการในบางสถานการณ์เท่านั้น
  • Facebook SDK สำหรับ iOS จะเข้าถึง IDFA เฉพาะในสถานการณ์ต่อไปนี้ 1) หากแอพของคุณลงโฆษณาในแอพผ่าน [Audience Network] ของ Facebook (/products/audience-network/) หรือ 2) หากแอพของคุณบันทึกการติดตั้งแอพหรือกิจกรรมในแอพบนมือถืออื่นเพื่อระบุที่มาของเหตุการณ์เหล่านั้นจากแคมเปญโฆษณาของคุณ
  • หากคุณไม่ได้บันทึกเหตุการณ์ในแอพ (ผ่านคลาส FBSDKAppEvents) Facebook SDK ก็จะไม่สามารถเข้าถึง IDFA ได้ นอกจากนี้ Facebook SDK ไม่จำเป็นต้องมี AdSupport.framework รวมอยู่ด้วย หากคุณต้องการติดตามเหตุการณ์ในแอพโดยการรวบรวม IDFA คุณสามารถปิดใช้งานการรวบรวม IDFA ภายในแดชบอร์ดของแอพของคุณได้ในส่วนการตั้งค่าขั้นสูง

กล่องการแชร์จะแจ้งวิธีการของ sharer:didCompleteWithResults: และ sharerDidCancel: ของตัวแทนเมื่อมีการดำเนินการของผู้ใช้

  • sharer:didCompleteWithResults: เมื่อผู้ใช้แชร์สำเร็จ นอกจากนี้ยังมีคีย์ postId ในพจนานุกรม ผลลัพธ์ หากผู้ใช้ให้สิทธิ์การอนุญาต publish_actions กับแอพ หากผู้ใช้ดังกล่าวไม่ได้เข้าสู่ระบบด้วยการเข้าสู่ระบบด้วย Facebook วิธีการนี้ยังจะได้รับการเรียกหากผู้ใช้คลิก ยกเลิก
  • sharerDidCancel: เมื่อมีผู้คลิกที่ปุ่ม X ของกล่องการแชร์ หรือหากผู้ใช้เข้าสู่ระบบด้วยการเข้าสู่ระบบด้วย Facebook แล้วคลิก ยกเลิก

หากคุณได้รับผลลัพธ์ที่ไม่คาดคิดเมื่อส่งคำขอ ให้เปิดการแก้ไขจุดบกพร่องสำหรับ FBSDKGraphRequests เพิ่มโค้ดนี้ก่อนคำขอใดๆ:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

คุณจะสามารถแก้ไขจุดบกพร่องของปัญหาใดๆ ได้โดยการดูคำขอและการตอบจากเซิร์ฟเวอร์โดยตรง

ลองพิจารณาดูที่ค่าคงที่ FBSDKLoggingBehavior* อื่นๆ ที่กำหนดไว้ใน FBSDKSettings.h สำหรับสิ่งอื่นที่คุณสามารถบันทึกได้