아래 4개 파일을 수정해줍니다.
(단, CirclinReact/app/src/main/res/layout/activity_main.xml
파일은 새로 추가해야하는 파일입니다.)
8.9버전
을 의미합니다. 페이스북 공식튜토리얼에서는 8.1버전을 기준으로 설명하는데 튜토리얼대로하면 brower embed 오류가 뜨니 주의해주세요.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를 해줘야합니다.
buildscript {
repositories {
...
mavenCentral()// <<-- 있는지 Check!
<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 -->
...
<?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>
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>
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"));
}
작동은 총 두가지입니다.