안드로이드 Oauth2을 이용한 로그인 어플 만들기.

 아는 지인에서 페이스북의 로그인 하는 방법을 알려달라고해서 Oauth2을 이용해서 페이스북 로그인을 할 수 있게 작업을 해줬었다.

 안드로이드에 페이스북을 연동하는 방법으로 다음과 같은 페이지를 참조하면 된다.




이렇게 사용해서 Android용 빠른 시작. 이라는 걸 클릭하면, 다음 페이지로 연결이 된다.


 주의 점은 개발자 계정을 연결시켜야 된다.



 이렇게 되어 있는 상태에서 Skip And Create App ID을 이용하면, 만들 수 있게 되어 있다.

  1.   facebook SDK 포함시키기.


 여기 설명을 그대로 사용한다면, 다음과 같다.



 프로젝트에서 최소 SDK는 'API15 : Anroid 4.0.3' 이상이야한다.


 이 후에 dependencies안에서 다음을 추가한다.


 그리고 Facebook SDK을 추가 하기 위해서 다음을 추가한다.


 이렇게 된다면, SDK는 사용할 수 있다.

 그 다음엔 SDK에서 페이스북의 앱 아이디를 연동하도록 하자.

 앱 아이디와 그런 것은 구글의 앱 아이디를 연결하는거랑 방식이 동일하니, 참조하자.


 여기서, facebook_app_id라는 것은 페이스북의 개발자 콘솔에서 추가해서 생성된 앱 번호를 뜻한다.
 그리고 Permission으로는 인터넷을 연동시키고, meta-data에서는 연동할 수 있게 입력하는 장치이다.

 이걸 입력하는 것은 manifests을 이용하면 된다.


 이 다음으로는 Google App Store(Google Play)에 올라온 패키지랑 연동하기 위해서 사용하는 것이다.
이것은 그냥 무시해도 된다.



 이번에는 해시값을 연결하는 것인데. 이것 또한 Google Console에 연동하는 것과 동일하게 keystore을 이용해서 해시값을 만들고, 그걸 연동하는 것이다.


 페이스북에서 로그인 버튼을 사용한 것으로, 페이스북 SDK에서 widget으로 구성이 되어 있다.

 다음은 MainActivity의 소스의 예시이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.sung.facebooklogins;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
 
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
 
import org.json.JSONObject;
 
import java.util.Arrays;
 
public class MainActivity extends AppCompatActivity {
 
    private CallbackManager callbackManager;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(this.getApplicationContext());
        setContentView(R.layout.activity_main);
 
        callbackManager = CallbackManager.Factory.create();
 
        LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions(Arrays.asList("public_profile""email"));
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest graphRequest = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        Log.v("result",object.toString());
                    }
                });
 
                Bundle parameters = new Bundle();
                parameters.putString("fields""id,name,email,gender,birthday");
                graphRequest.setParameters(parameters);
                graphRequest.executeAsync();
            }
 
            @Override
            public void onCancel() {
 
            }
 
            @Override
            public void onError(FacebookException error) {
                Log.e("LoginErr",error.toString());
            }
        });
    }
 
}
 
cs

 이렇게 해서 간단하게, 로그인을 처리할 수 있게 된다.

 로그인이 이상없이 성공이 되면, onSuccess에서 동작이 되고, 실패하면 onError, 취소하면 OnCancel에서 동작하게 된다.

 성공을 하면, JSON 방식으로 데이터를 주고 받게 되며, 이걸로 성공 유무를 처리할 수 있게된다.
Posted by JunkMam
,