페이스북 로그인 연동 가이드

아래 4개 파일을 수정해줍니다.

(단, CirclinReact/app/src/main/res/layout/activity_main.xml 파일은 새로 추가해야하는 파일입니다.)

  1. 외부 의존성 라이브러리를 추가합니다.
dependencies {
		implementation 'com.facebook.android:facebook-core:[8,9)'// <<-- add
    implementation 'com.facebook.android:facebook-login:[8,9)'// <<-- add
    implementation 'com.facebook.android:facebook-share:[8,9)'// <<-- add
    implementation 'com.facebook.android:facebook-messenger:[8,9)'// <<-- add
    implementation 'com.facebook.android:facebook-applinks:[8,9)'// <<-- add

추가를하고 나면 반드시 Sync Now를 해줘야합니다.

스크린샷 2021-12-10 오후 6.35.59.png

buildscript {
    repositories {
        ...
        mavenCentral()// <<-- 있는지 Check!
  1. meta-data태그를 추가해서 facebook key(value)를 넣어줍니다.
<application>
	<activity android:configChanges="orientation|screenSize|screenLayout">
	...
	</activity> 
<!-- FaceBook Login Added -->
        <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"/>
        <meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled"
            android:value="false"/>
        <meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled"
            android:value="false"/>
        <meta-data android:name="com.facebook.sdk.AutoInitEnabled"
            android:value="false"/> <!--OPTIONAL-->
        <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>
        <!-- FaceBook Login Added End -->
...
  1. 버튼을 보여줄 View를 넣어줍니다.(dp0이므로 보이진 않지만 callback을 받기 위해 써야합니다.)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="<http://schemas.android.com/apk/res/android>"
    xmlns:app="<http://schemas.android.com/apk/res-auto>"
    xmlns:tools="<http://schemas.android.com/tools>"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    >
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </WebView>
    **<Button
        android:id="@+id/btn_fb_login"
     android:layout_height="0dp" android:layout_width="0dp"
        tools:ignore="MissingConstraints" />**

</androidx.constraintlayout.widget.ConstraintLayout>
  1. app_id와 token을 넣어줍니다.(facebook developer 홈에서 확인가능합니다.)

app_id는 과거 5.5 써클인앱에서 쓰던 것과 동일합니다.

<resources>
	...
	<string name="facebook_app_id">686148425700944</string>
	<string name="fb_login_protocol_scheme">fb686148425700944</string>
<string name="facebook_client_token">8e48a0d2045ca1771eade65340d18f8b</string>

	~~<string name="facebook_app_id">691673194896893</string>
	<string name="facebook_client_token">8e48a0d2045ca1771eade65340d18f8b</string>
	<string name="fb_login_protocol_scheme">fb612868036461832</string>~~
	...
<resources>
  1. MainActivity.java에 아래 코드를 추가하여 버튼을 확인합니다.
import com.facebook.AccessToken;
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.firebase.installations.Utils;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   ****
		setContentView(R.layout.activity_main);
		...

//#region Android Facebook Init
        FacebookSdk.setAutoLogAppEventsEnabled(true);
        FacebookSdk.setAdvertiserIDCollectionEnabled(true);
        FacebookSdk.setAutoInitEnabled(true);
        FacebookSdk.fullyInitialize();

        mCallbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(mCallbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        try {
                            GraphRequest request = GraphRequest.newMeRequest(
                                    loginResult.getAccessToken(),
                                    new GraphRequest.GraphJSONObjectCallback() {
                                        @Override
                                        public void onCompleted(JSONObject object, GraphResponse response) {
                                            // Application code
                                            try {
                                                Log.v("FACEBOOK LOGIN", response.toString());
                                                String fb_id = response.getJSONObject().getString("id");   //FaceBook User ID
                                                String fb_name = response.getJSONObject().getString("name");
                                                //String profilePicUrl = "<https://graph.facebook.com/>" + fb_id + "/picture?width=200&height=200";
                                                    try {
                                                        JSONObject obj = new JSONObject("{}");
                                                        obj.put("id", fb_id);
                                                        obj.put("name", fb_name);
                                                        obj.put("accessToken", loginResult.getAccessToken().getToken());
                                                        final String data = obj.toString();

                                                        postToReact("loginFacebook", data);
                                                        Log.i("Facebook onPost loginF", data);
                                                    } catch (JSONException e) {
                                                        e.printStackTrace();
                                                    }
                                            } catch (Exception e) {
                                                e.printStackTrace();
                                            }
                                        }
                                    });
                            Bundle parameters = new Bundle();
                            parameters.putString("fields", "id,name,email,picture.type(small)");
                            request.setParameters(parameters);
                            request.executeAsync();

                        } catch (Exception e) {
                            Log.e("facebook ERROR", e.toString());
                        }
                    }
                    @Override
                    public void onCancel() {
                        Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
                    }
                    @Override
                    public void onError(FacebookException exception) {
                        Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });
        setContentView(R.layout.activity_main);
        Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login);
        btn_fb_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends"));
            }
        });
        //#endregion Android Facebook Init

...

//Facebook Func
    private void loginFacebook() {
        LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends"));
    }

테스트하기

작동은 총 두가지입니다.