ตั้งแต่วันที่ 5 ตุลาคม 2021 เป็นต้นไป การเข้าสู่ระบบด้วย Facebook จะไม่รองรับเบราว์เซอร์แบบฝังบนอุปกรณ์ Android (WebViews) สำหรับการยืนยันตัวตนผู้ใช้

สำหรับข้อมูลที่มาของการยกเลิกครั้งนี้ โปรดดูบล็อกโพสต์ การเลิกรองรับการยืนยันตัวตนเพื่อเข้าสู่ระบบ FB บนเบราว์เซอร์แบบฝังในอุปกรณ์ Android

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการยกเลิก Webviews และเปลี่ยนมาใช้ Custom Tabs แทน โปรดดู การยกเลิกใช้งาน WebViews บนอุปกรณ์ Android

การเข้าสู่ระบบด้วย Facebook สำหรับ Android - การเริ่มต้นใช้งานอย่างง่าย

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

โปรดดูโปรเจ็กต์ตัวอย่างที่แสดงวิธีผสานการทำงานการเข้าสู่ระบบด้วย Facebook เข้ากับแอพ Android ที่ FBLoginSample บน GitHub

ทำตามขั้นตอนด้านล่างเพื่อเพิ่มการเข้าสู่ระบบด้วย Facebook ในแอพของคุณ

1. เข้าสู่ระบบ

โปรดเข้าสู่ระบบ Facebook เพื่อสร้างแอพหรือลงทะเบียนในฐานะผู้พัฒนา

2. ดาวน์โหลดแอพ Facebook

ดาวน์โหลดแอพ Facebook โดยการคลิกที่ปุ่มด้านล่าง

3. ผสานการทำงาน Facebook SDK

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

การใช้ Maven

  1. ในโปรเจ็กต์ของคุณ ให้เปิด your_app > Gradle Scripts > build.gradle (Project) และตรวจสอบให้แน่ใจว่าที่จัดเก็บต่อไปนี้แสดงอยู่ใน buildscript { repositories {}}
    mavenCentral() 
    
  2. ในโปรเจ็กต์ของคุณ ให้เปิด your_app > Gradle Scripts > build.gradle (Module: app) และเพิ่มคำสั่งใช้งานต่อไปนี้ลงในส่วน dependencies{} เพื่อใช้ SDK การเข้าสู่ระบบด้วย Facebook ในเวอร์ชั่นล่าสุด
     implementation 'com.facebook.android:facebook-login:latest.release'
    
  3. สร้างโปรเจ็กต์ของคุณ

4. แก้ไขแหล่งข้อมูลและไฟล์กำกับ

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

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

สร้างสตริงสำหรับ ID ของแอพ Facebook ของคุณและสำหรับสิ่งที่จำเป็นเพื่อเปิดใช้งานแท็บที่กำหนดเองบน Chrome นอกจากนี้ ให้เพิ่ม FacebookActivity ไปยังไฟล์กำกับ Android ของคุณ
  1. เปิดไฟล์ /app/res/values/strings.xml ของคุณ
  2. เพิ่มองค์ประกอบ string ที่มีชื่อ facebook_app_id, fb_login_protocol_scheme และ facebook_client_token และตั้งค่าให้กับ ID ของแอพและโทเค็นของไคลเอ็นต์ของคุณ ตัวอย่างเช่น หาก ID ของแอพเป็น 1234 และโทเค็นของไคลเอ็นต์ของคุณเป็น 56789 โค้ดของคุณจะมีลักษณะดังต่อไปนี้
    <string name="facebook_app_id">1234</string>
    <string name="fb_login_protocol_scheme">fb1234</string>
    <string name="facebook_client_token">56789</string>
    
    
  3. เปิดไฟล์ /app/manifest/AndroidManifest.xml
  4. เพิ่มองค์ประกอบ meta-data ให้กับองค์ประกอบ application สำหรับ ID ของแอพและโทเค็นของไคลเอ็นต์ของคุณดังนี้
    <application android:label="@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. เพิ่มกิจกรรมสำหรับ Facebook และตัวกรองกิจกรรมและความประสงค์สำหรับแท็บ Chrome แบบกำหนดเองภายในองค์ประกอบ application ของคุณดังนี้
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                    "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
    
  6. เพิ่มองค์ประกอบ uses-permission ไปยังไฟล์กำกับหลังจากองค์ประกอบ application ดังนี้
    <uses-permission android:name="android.permission.INTERNET"/>
    
    
  7. (ระบุหรือไม่ก็ได้) หากต้องการเลือกไม่ใช้สิทธิ์การอนุญาต ID การโฆษณา ให้เพิ่มองค์ประกอบ uses-permission ให้กับไฟล์กำกับหลังจากองค์ประกอบ application ดังนี้
    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
            
  8. คุณสามารถกำหนดการลงบันทึกเหตุการณ์ในแอพอัตโนมัติให้เป็น “true” หรือ “false” ได้โดยตรง โดยกำหนดรายงานปัญหา AutoLogAppEventsEnabled ในไฟล์ AndroidManifest.xml

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

5. เชื่อมโยงชื่อแพ็คเกจของคุณและคลาสเริ่มต้นเข้ากับแอพของคุณ

คุณจะต้องเข้าสู่ระบบเพื่อให้ขั้นตอนนี้เสร็จสมบูรณ์

6. ระบุแฮชคีย์การพัฒนาและการเผยแพร่สำหรับแอพของคุณ

คุณจะต้องเข้าสู่ระบบเพื่อให้ขั้นตอนนี้เสร็จสมบูรณ์

7. เปิดใช้งานการลงชื่อเข้าใช้แบบครั้งเดียวให้แอพของคุณ

คุณจะต้องเข้าสู่ระบบเพื่อให้ขั้นตอนนี้เสร็จสมบูรณ์

8. เพิ่มปุ่มการเข้าสู่ระบบด้วย Facebook

วิธีที่ง่ายที่สุดในการเพิ่มการเข้าสู่ระบบด้วย Facebook ในแอพคือเพิ่ม LoginButton จาก SDK โดย LoginButton เป็นองค์ประกอบ UI ที่จะล้อมฟังก์ชั่นการทำงานที่สามารถใช้งานได้ใน LoginManagerดังนั้น เมื่อมีผู้คลิกปุ่ม การเข้าสู่ระบบจะเริ่มต้นขึ้นโดยใช้สิทธิ์การอนุญาตที่ตั้งค่าไว้ใน LoginManagerการเข้าสู่ระบบด้วย Facebook ต้องใช้สิทธิ์การอนุญาต public_profile ขั้นสูง ซึ่งจะใช้งานโดยผู้ใช้ภายนอก ปุ่มนี้จะอยู่หลังสถานะการเข้าสู่ระบบ และแสดงข้อความที่ถูกต้องตามสถานะการยืนยันตัวตนของผู้ใช้
หากต้องการเพิ่มปุ่มการเข้าสู่ระบบด้วย Facebook ให้เพิ่มลงในไฟล์ XML เลย์เอาท์ของคุณก่อน
<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp" /> 

9. ลงทะเบียนการเรียกกลับ

แล้วจึงสร้าง callbackManager ให้จัดการการตอบสนองการเข้าสู่ระบบโดยเรียกใช้ CallbackManager.Factory.create
callbackManager = CallbackManager.Factory.create();
หากคุณกำลังเพิ่มปุ่มในองค์ประกอบย่อย คุณต้องอัพเดตกิจกรรมของคุณด้วยจึงจะสามารถใช้องค์ประกอบย่อยนั้นได้ คุณสามารถปรับแต่งคุณสมบัติของ Login button และระบุการเรียกกลับในเมธอด onCreate() หรือ onCreateView() ได้ คุณสมบัติที่ปรับแต่งได้มี LoginBehavior, DefaultAudience, ToolTipPopup.Style และสิทธิ์การอนุญาตใน LoginButton ตัวอย่างเช่น
      
    private static final String EMAIL = "email";
      
    loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions(Arrays.asList(EMAIL));
    // If you are using in a fragment, call loginButton.setFragment(this);    

    // Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
        }

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
        }
    });
หากต้องการตอบสนองต่อผลการเข้าสู่ระบบ คุณต้องระบุการเรียกกลับโดยใช้ LoginManager หรือ LoginButton หากคุณระบุการเรียกกลับด้วย LoginButton ก็ไม่จำเป็นต้องระบุการเรียกกลับในตัวจัดการการเข้าสู่ระบบ
คุณสามารถเพิ่มการเรียกกลับ LoginManager ในเมธอด onCreate() ของกิจกรรมหรือองค์ประกอบย่อยดังนี้
    callbackManager = CallbackManager.Factory.create();      
      
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                }

                @Override
                public void onCancel() {
                     // App code
                }

                @Override
                public void onError(FacebookException exception) {
                     // App code   
                }
    });
หากเข้าสู่ระบบสำเร็จ พารามิเตอร์ LoginResult จะมี AccessToken ใหม่และสิทธิ์การอนุญาตที่เพิ่งให้หรือปฏิเสธล่าสุด
คุณไม่จำเป็นต้องมี registerCallback เพื่อให้การเข้าสู่ระบบสำเร็จ คุณสามารถเลือกติดตามการเปลี่ยนแปลงโทเค็นการเข้าถึงปัจจุบันด้วยคลาส AccessTokenTracker ที่ระบุไว้ด้านล่างได้
สุดท้ายนี้ ให้เรียกใช้ callbackManager.onActivityResult ในเมธอด onActivityResult ของคุณ เพื่อส่งผ่านผลการเข้าสู่ระบบไปที่ LoginManager ผ่าน callbackManager

หากคุณกำลังใช้งานกิจกรรมหรือองค์ประกอบย่อย AndroidX คุณไม่จำเป็นต้องเขียนทับ onActivityResult

      @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
กิจกรรมและองค์ประกอบย่อยแต่ละอย่างที่คุณรวมกับการเข้าสู่ระบบด้วย FacebookSDK หรือการแชร์ควรส่งต่อ onActivityResult ไปยัง callbackManager

10. ตรวจสอบสถานะการเข้าสู่ระบบ

แอพของคุณสามารถมีผู้ใช้เข้าสู่ระบบได้เพียงครั้งละหนึ่งคน แล้ว LoginManager จะตั้งค่า AccessToken ปัจจุบันและ Profile ให้กับผู้ใช้นั้น FacebookSDK จะบันทึกข้อมูลนี้ในการกำหนดลักษณะที่แชร์ และตั้งค่าในระหว่างการเริ่มต้นช่วงเวลาที่ใช้งาน คุณจะเห็นได้ว่าผู้ใช้เข้าสู่ระบบหรือยังโดยตรวจสอบ AccessToken.getCurrentAccessToken() และ Profile.getCurrentProfile()
คุณสามารถโหลด AccessToken.getCurrentAccessToken ด้วย SDK จากแคชหรือบุ๊กมาร์กของแอพเมื่อแอพเรียกเปิดจากการเริ่มต้นใหม่ คุณควรตรวจสอบความถูกต้องในวิธีการonCreateของ Activity:
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
  
จากนั้นคุณสามารถเข้าสู่ระบบจริงได้ เช่น ใน OnClickListener ของปุ่มที่กำหนดเอง ดังนี้
      
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

11. เปิดใช้งานการเข้าสู่ระบบด่วน

การเข้าสู่ระบบด่วนช่วยให้ผู้คนเข้าสู่ระบบด้วยบัญชี Facebook ในอุปกรณ์และแพลตฟอร์มของพวกเขา หากมีคนเข้าสู่ระบบแอพของคุณบน Android จากนั้นเปลี่ยนอุปกรณ์ การเข้าสู่ระบบด่วนจะช่วยให้พวกเขาเข้าสู่ระบบด้วยบัญชี Facebook ได้แทนการขอให้พวกเขาเลือกวิธีการเข้าสู่ระบบ การดำเนินการนี้ช่วยหลีกเลี่ยงการสร้างบัญชีซ้ำหรือการเข้าสู่ระบบล้มเหลว หากต้องการรองรับการเปลี่ยนแปลงใน Android 11 อันดับแรกให้เพิ่มโค้ดต่อไปนี้ในองค์ประกอบ queries ในไฟล์ของคุณ /app/manifest/AndroidManifest.xml
  
<queries> <package android:name="com.facebook.katana" /> </queries>   
โค้ดต่อไปนี้แสดงให้เห็นวิธีการเปิดใช้งานการเข้าสู่ระบบด่วน
LoginManager.getInstance().retrieveLoginStatus(this, new LoginStatusCallback() { @Override public void onCompleted(AccessToken accessToken) { // User was previously logged in, can log them in directly here. // If this callback is called, a popup notification appears that says // "Logged in as <User Name>" } @Override public void onFailure() { // No access token could be retrieved for the user } @Override public void onError(Exception exception) { // An error occurred } });   

ขั้นตอนถัดไป

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