การเริ่มต้นใช้งาน Facebook SDK สำหรับ Android

เอกสารประกอบนี้จะอธิบายวิธีเริ่มผสานการทำงานแอพ Android ของคุณเข้ากับ Facebook โดยใช้ Facebook SDK สำหรับ Android Facebook SDK สำหรับ Android เวอร์ชั่นปัจจุบันคือเวอร์ชั่น 12.0.0 และต้องใช้ Android API 15 โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับเวอร์ชั่นและฟีเจอร์ต่างๆ ที่ Facebook SDK สำหรับ Android

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

คุณสามารถตั้งค่าแอพของคุณเพื่อใช้ Facebook SDK สำหรับ Android ได้ด้วยวิธีดังต่อไปนี้

  • โดยใช้การเริ่มต้นใช้งานอย่างง่าย
  • โดยการตั้งค่าโปรเจ็กต์ของคุณด้วย Facebook SDK สำหรับ Android

การเริ่มต้นใช้งานอย่างง่าย

หากต้องการรับ ID ของแอพ Facebook ให้กำหนดการตั้งค่าของแอพ แล้วนำเข้า Facebook SDK สำหรับ Android จากนั้นคลิกที่ปุ่มด้านล่างแล้วทำตามคำแนะนำ

การเริ่มต้นใช้งานอย่างง่ายสำหรับ Android

ก่อนเริ่มต้น

คุณจะต้องดำเนินการดังต่อไปนี้

ทำความเข้าใจสิทธิ์การอนุญาตสำหรับ ID การลงโฆษณา

นับตั้งแต่เวอร์ชั่น 13.0.0 แต่ละแอพที่คุณสร้างขึ้นโดยใช้ Facebook SDK สำหรับ Android จะเพิ่มสิทธิ์การอนุญาตสำหรับ ID การลงโฆษณาให้กับแอพของคุณโดยอัตโนมัติ โปรดดูข้อมูลเพิ่มเติมที่ ID การลงโฆษณา - ความช่วยเหลือเกี่ยวกับ Play Console

ในบางกรณี คุณอาจต้องการเลือกที่จะไม่รวมสิทธิ์การอนุญาตสำหรับ ID การลงโฆษณาไว้ในแอพของคุณ ตัวอย่างเช่น หากลูกค้าสำหรับแอพของคุณเป็นเด็กและครอบครัว คุณอาจไม่จำเป็นต้องใช้สิทธิ์การอนุญาตสำหรับ ID การลงโฆษณา หากต้องการยกเว้นสิทธิ์การอนุญาตสำหรับ ID การลงโฆษณาจากแอพของคุณ ให้ปฏิบัติตามคำแนะนำที่ระบุไว้ในส่วนหลังของเอกสารประกอบนี้

การตั้งค่า Android Studio

สร้างโปรเจ็กต์ของคุณ

หากต้องการใช้ Facebook SDK ในโปรเจ็กต์บน Android Studio ให้เพิ่ม SDK ดังกล่าวเป็นทรัพยากรที่ต้องใช้ในการสร้าง (Build Dependency) และนำเข้า SDK นั้น

  1. ไปที่ Android Studio | New Project (โปรเจ็กต์ใหม่) | Minimum SDK (SDK ขั้นต่ำ)

  2. เลือก API 15: Android 4.0.3 (IceCreamSandwich) หรือเวอร์ชั่นที่สูงกว่านั้น แล้วสร้างโปรเจ็กต์ใหม่ของคุณ

  3. เปิดไฟล์ Gradle Scripts | build.gradle (Project: <your_project>) แล้วเพิ่มโค้ดต่อไปนี้

    mavenCentral()
    
  4. บันทึกและปิดไฟล์ build.gradle (Project: <your_project>)

  5. เปิดไฟล์ Gradle Scripts | build.gradle (Module: app) แล้วเพิ่มโค้ดต่อไปนี้ลงในส่วน dependencies

    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    

  6. บันทึกและปิดไฟล์ build.gradle (Module: app)

  7. สร้างโปรเจ็กต์ของคุณ ตอนนี้ คุณสามารถนำเข้า com.facebook.FacebookSdk ลงในแอพของคุณได้แล้ว

อัพเดตไฟล์ Manifest ของคุณ

เพิ่ม ID ของแอพและโทเค็นของไคลเอ็นต์ของคุณลงในไฟล์สตริงของโปรเจ็กต์ แล้วอัพเดตไฟล์ Manifest ให้ดำเนินการดังต่อไปนี้

  1. เปิดไฟล์ /app/res/values/strings.xml ในโปรเจ็กต์สำหรับแอพของคุณ

  2. เพิ่มองค์ประกอบ string ที่มีชื่อว่า facebook_app_id และ facebook_client_token แล้วตั้งค่าเป็น ID ของแอพและโทเค็นของไคลเอ็นต์ของคุณ ตัวอย่างเช่น หาก ID ของแอพเป็น 1234 และโทเค็นของไคลเอ็นต์ของคุณเป็น 56789 โค้ดของคุณจะมีลักษณะดังนี้

    <string name="facebook_app_id">1234</string><string name="facebook_client_token">56789</string>
  3. เปิดไฟล์ /app/manifests/AndroidManifest.xml ในโปรเจ็กต์สำหรับแอพของคุณ

  4. เพิ่มองค์ประกอบ meta-data ให้กับองค์ประกอบ application สำหรับ ID ของแอพและโทเค็นของไคลเอ็นต์ของคุณดังนี้

    <application android:label="&#064;string/app_name" ...>
        ...
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/><meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
  5. เพิ่มองค์ประกอบ uses-permission ไปยังไฟล์ Manifest หลังจากองค์ประกอบ application ดังนี้

    <uses-permission android:name="android.permission.INTERNET"/>
  6. (ทางเลือก) หากต้องการเลือกไม่ใช้สิทธิ์การอนุญาตสำหรับ ID การลงโฆษณา ให้เพิ่มองค์ประกอบ uses-permission ลงในไฟล์ Manifest หลังจากองค์ประกอบ application ดังนี้

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
  7. สร้างโปรเจ็กต์ของคุณ

เปิดใช้งานการแชร์

หากคุณแชร์ลิงก์ รูปภาพ หรือวิดีโอจากแอพ ให้ประกาศสิทธิ์ FacebookContentProvider ในไฟล์ Manifest ให้ดำเนินการดังต่อไปนี้

  1. เปิดไฟล์ /app/manifests/AndroidManifest.xml ในโปรเจ็กต์สำหรับแอพของคุณ

  2. เพิ่มองค์ประกอบ provider ลงในไฟล์ Manifest สำหรับสิทธิ์ FacebookContentProvider นำ ID ของแอพของคุณไปต่อท้ายค่า authorities ตัวอย่างเช่น หาก ID ของแอพของคุณคือ 1234 การประกาศจะมีลักษณะดังนี้

    <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
    
  3. สร้างโปรเจ็กต์ของคุณ

การรันแอพตัวอย่าง

ตัวอย่างต่อไปนี้จะมาพร้อมกับ Facebook SDK สำหรับ Android

  • HelloFacebookSample — แสดงสิทธิ์การเข้าถึงโปรไฟล์ การอัพเดตสถานะ และการอัพโหลดรูปภาพ

คุณสามารถทดลองกับตัวอย่างได้โดยนำเข้า Facebook SDK ไปยังโปรเจ็กต์ใน Android Studio ตัวอย่างจะมีทรัพยากรที่ต้องใช้ของโปรเจ็กต์ แทนที่จะเป็นทรัพยากรที่ต้องใช้ของที่เก็บส่วนกลางผ่าน Maven Central หรือ JCenter ทั้งนี้ก็เพื่อให้ตัวอย่างแสดงถึงการเปลี่ยนแปลงต่างๆ ที่เกิดขึ้นเมื่อสำเนา SDK ในเครื่องได้รับการอัพเดต

หากต้องการรันแอพตัวอย่างโดยเร็ว คุณสามารถสร้างแฮชคีย์สำหรับสภาพแวดล้อมการพัฒนาของคุณได้ ให้เพิ่มแฮชคีย์เหล่านี้ลงในโปรไฟล์ผู้พัฒนาของ Facebook ของคุณสำหรับแอพตัวอย่าง Keytool (ซึ่งมีไว้สำหรับสร้างแฮชคีย์) จะรวมอยู่กับ Java SE Development Kit (JDK) ที่คุณได้ติดตั้งไว้เป็นส่วนหนึ่งในการตั้งค่าสภาพแวดล้อมการพัฒนาของคุณ OpenSSL เปิดให้ดาวน์โหลดได้จาก OpenSSL

บน OS X ให้รันโค้ดดังต่อไปนี้

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

บน Windows คุณจำเป็นต้องมีสิ่งต่อไปนี้

รันคำสั่งต่อไปนี้ในพร้อมท์คำสั่งในโฟลเดอร์ Java SDK ซึ่งจะสร้างสตริงที่มีความยาว 28 อักขระขึ้นมา

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

ไปที่เว็บไซต์สำหรับผู้พัฒนาของ Facebook เข้าสู่ระบบ Facebook จากนั้นไปที่การตั้งค่าสำหรับผู้พัฒนาโดยใช้เมนูดร็อปดาวน์ทางด้านขวาบน

ในการตั้งค่าสำหรับผู้พัฒนา ให้เลือกแอพตัวอย่างจากเมนู แล้วเพิ่มและบันทึกแฮชคีย์ของคุณไว้ในโปรไฟล์

คุณสามารถเพิ่มแฮชคีย์ได้หลายรายการ หากคุณพัฒนาโดยใช้แมชชีนจำนวนหลายเครื่อง

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

สร้างแฮชคีย์สำหรับการพัฒนา

Facebook ใช้แฮชคีย์เพื่อยืนยันตัวตนในการโต้ตอบต่างๆ ระหว่างแอพของคุณกับแอพ Facebook หากคุณรันแอพที่ใช้การเข้าสู่ระบบด้วย Facebook คุณจำเป็นต้องเพิ่มแฮชคีย์สำหรับการพัฒนาของ Android ลงในโปรไฟล์ผู้พัฒนาของ Facebook ของคุณด้วย

สำหรับเวอร์ชั่นของแอพที่คุณจะเผยแพร่ออกไป คุณจำเป็นต้องสร้างและตั้งค่าแฮชคีย์สำหรับการเผยแพร่ด้วย

คุณสามารถรับแฮชคีย์ได้โดยสร้างแฮชคีย์ขึ้นมาหรือใช้ค่าที่ Settings.getApplicationSignature(Context) ส่งคืนมาก็ได้ ไม่ว่าจะเป็น OS X หรือ Windows โปรดดูคำแนะนำที่การรันแอพตัวอย่าง

สร้างแฮชคีย์สำหรับการเผยแพร่

ในการยืนยันตัวตนสำหรับการแลกเปลี่ยนข้อมูลระหว่างแอพของคุณกับ Facebook คุณจำเป็นต้องสร้างแฮชคีย์สำหรับการเผยแพร่และเพิ่มแฮชคีย์นี้ลงในการตั้งค่า Android ภายใน ID ของแอพ Facebook ของคุณ หากไม่มีแฮชคีย์นี้ การผสานการทำงานกับ Facebook อาจทำงานไม่เหมาะสมเมื่อเผยแพร่แอพของคุณไปยังร้านค้า

คุณควรจะได้อัพเดตการตั้งค่าสำหรับผู้พัฒนาของ Facebook ไปแล้วในขั้นตอนก่อนหน้านี้ โดยใช้แฮชคีย์สำหรับสภาพแวดล้อมการพัฒนาของคุณ

เมื่อเผยแพร่แอพของคุณ แอพดังกล่าวมักได้รับการลงนามด้วยลายเซ็นที่แตกต่างกันตามสภาพแวดล้อมการพัฒนาของคุณ ดังนั้น คุณต้องตรวจสอบให้แน่ใจว่าคุณได้สร้างแฮชคีย์สำหรับการเผยแพร่และเพิ่มแฮชคีย์ดังกล่าวในการตั้งค่า Android สำหรับ ID ของแอพ Facebook

หากต้องการสร้างแฮชของคีย์สำหรับการเผยแพร่ ให้รันคำสั่งต่อไปนี้บน Mac หรือ Windows โดยแทนที่ชื่อแทนของคีย์สำหรับการเผยแพร่และพาธไปยังคีย์สโตร์ของคุณ

บน Mac OS ให้รันโค้ดดังต่อไปนี้

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

บน Windows คุณจำเป็นต้องมีสิ่งต่อไปนี้

รันคำสั่งต่อไปนี้ในพร้อมท์คำสั่งในโฟลเดอร์ Java SDK

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64

ตรวจสอบให้แน่ใจว่าได้ใช้รหัสผ่านที่คุณตั้งค่าไว้เมื่อสร้างคีย์สำหรับการเผยแพร่เป็นครั้งแรก

คำสั่งนี้ควรสร้างสตริงที่มีความยาว 28 อักขระขึ้นมา ให้คัดลอกและวางแฮชคีย์สำหรับการเผยแพร่นี้ลงในการตั้งค่า Android ของ ID ของแอพ Facebook

นอกจากนี้ คุณยังควรตรวจสอบว่า การตั้งค่า Android ของ ID ของแอพ Facebook มีชื่อแพ็คเกจที่ถูกต้องและคลาสกิจกรรมหลักสำหรับแพ็คเกจ Android ของคุณอีกด้วย

ใช้ Facebook SDK สำหรับ Android ร่วมกับ Maven

คุณสามารถประกาศทรัพยากรที่ต้องใช้ของ Maven ด้วย Facebook SDK สำหรับ Android เวอร์ชั่นล่าสุดที่มีให้ใช้งาน

<dependency>
  <groupId>com.facebook.android</groupId>
  <artifactId>facebook-android-sdk</artifactId>
  <version>PUT_LATEST_VERSION_HERE</version>
</dependency> 

การแก้ไขปัญหาของแอพตัวอย่าง

หากคุณพบปัญหาในการรันแอพตัวอย่าง ปัญหาดังกล่าวอาจเกี่ยวข้องกับแฮชคีย์ คุณอาจพบสถานการณ์อย่างใดอย่างหนึ่งต่อไปนี้

  • กล่องการเข้าสู่ระบบแบบเนทีฟจะปรากฏขึ้น แต่หลังจากยอมรับสิทธิ์การอนุญาตแล้ว คุณจะยังคงอยู่ในสถานะออกจากระบบ โดย Logcat ยังมีข้อยกเว้นดังต่อไปนี้ด้วย
12-20 10:23:24.507: W/fb4a:fb:OrcaServiceQueue(504):
com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id
  • กล่องการเข้าสู่ระบบที่ไม่ใช่แบบเนทีฟจะปรากฏขึ้นพร้อมข้อความแสดงข้อผิดพลาดว่า “..แอพได้รับการกำหนดค่าไม่ถูกต้องสำหรับการเข้าสู่ระบบด้วย Facebook...”

ตรวจสอบแฮชคีย์ของคุณ และควรตรวจสอบให้มั่นใจว่าคุณใช้แฮชคีย์ที่ถูกต้อง I

นอกจากนี้ คุณยังสามารถปรับเปลี่ยนโค้ดตัวอย่างด้วยตนเองเพื่อให้ใช้แฮชคีย์ที่ถูกต้องได้อีกด้วย ตัวอย่างเช่น ในคลาส HelloFacebookSampleActivity ให้ทำการเปลี่ยนแปลงชั่วคราวกับ onCreate() ดังนี้

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {
        
    } catch (NoSuchAlgorithmException e) {
        
    }
    
    ...

บันทึกการเปลี่ยนแปลงและรันตัวอย่างอีกครั้ง ให้ตรวจสอบเอาต์พุตของ Logcat ที่คุณได้รับเพื่อหาข้อความที่คล้ายคลึงกันนี้

12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

บันทึกแฮชคีย์ในโปรไฟล์ผู้พัฒนาของคุณ รันตัวอย่างอีกครั้งและตรวจสอบยืนยันว่าคุณสามารถเข้าสู่ระบบได้สำเร็จ