안드로이드

안드로이드 네이버 아이디 로그인[2] : 유저 이름, 프로필 이미지, 별명, 이메일 등 개인정보 불러오기

알통몬_ 2017. 12. 6. 14:08
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


안드로이드 네이버 아이디 로그인 구현에 대해 포스팅했었는데요.

2017/10/17 - [안드로이드] - 안드로이드 네이버 아이디 로그인 구현하기 android naver id login


이번 포스팅에서는 로그인한 유저의 정보를 불러오는 방법에 대해서 

알아보겠습니다.

먼저 지난포스팅 후 네이버아이디로그인 라이브러리가 업데이트되었습니다.

이번 포스팅에서는 최신 버전을 사용합니다.

.jar 파일이 사라지고 .aar 파일로 바뀌었습니다.

app/lib 아래에 다운받은 .aar 파일을 넣어주시고,

프로젝트를 열어 

file -> Project Structure -> .aar 파일을 프로젝트로 불러옵니다.


그리고 Manifest.xml 에 internet 퍼미션을 추가해주고요.,

<uses-permission android:name="android.permission.INTERNET" />


액티비티를 만듭니다.

LoginActivity.java

OAuthLogin oAuthLogin = OAuthLogin.getInstance();
oAuthLogin.init(
this
,getString(R.string.clientId)
,getString(R.string.clientSecret)
,"amtalk"
//,OAUTH_CALLBACK_INTENT
// SDK 4.1.4 버전부터는 OAUTH_CALLBACK_INTENT변수를 사용하지 않습니다.
);
if (oAuthLogin.getAccessToken(this) != null) {
startActivity(new Intent(this,MainActivity.class));
finish();
} else {
binding.buttonOAuthLoginImg.setOAuthLoginHandler(new NaverHandler(this, oAuthLogin, this));
}

로그인 상태가 아닐 경우 else{} 블록의 코드가 실행되는데요.

NaverHandler 클래스가 필요합니다.

NaverHandler.java

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public class NaverHandler extends OAuthLoginHandler {
 
    private Context mContext;
    private LoginActivity activity;
    private OAuthLogin mOAuthLoginModule;
 
 
    NaverHandler(Context mContext, OAuthLogin mOAuthLoginModule, LoginActivity activity) {
        this.mContext = mContext;
        this.mOAuthLoginModule = mOAuthLoginModule;
        this.activity = activity;
    }
 
    @Override
    public void run(boolean success) {
        if (success) {
            final String accessToken = mOAuthLoginModule.getAccessToken(mContext);
             // 얘가 있어야 유저 정보를 가져올 수 있습니다.
            ProfileTask task = new ProfileTask();
            // 이 클래스가 유저정보를 가져오는 업무를 담당합니다.
            task.execute(accessToken);
        } else {
            String errorCode = mOAuthLoginModule.getLastErrorCode(mContext).getCode();
            String errorDesc = mOAuthLoginModule.getLastErrorDesc(mContext);
            Toast.makeText(mContext, "errorCode:" + errorCode
                    + ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();
        }
    }
 
    class ProfileTask extends AsyncTask<String, Void, String> {
        String result;
        @Override
        protected String doInBackground(String... strings) {
            String token = strings[0];// 네이버 로그인 접근 토큰;
            String header = "Bearer " + token; // Bearer 다음에 공백 추가
            try {
                String apiURL = "https://openapi.naver.com/v1/nid/me";
                URL url = new URL(apiURL);
                HttpURLConnection con = (HttpURLConnection)url.openConnection();
                con.setRequestMethod("GET");
                con.setRequestProperty("Authorization", header);
                int responseCode = con.getResponseCode();
                BufferedReader br;
                if(responseCode==200) { // 정상 호출
                    br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                } else {  // 에러 발생
                    br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
                }
                String inputLine;
                StringBuffer response = new StringBuffer();
 
                while ((inputLine = br.readLine()) != null) {
                    response.append(inputLine);
                }
                result = response.toString();
                br.close();
                System.out.println(response.toString());
            } catch (Exception e) {
                System.out.println(e);
            }
            //result 값은 JSONObject 형태로 넘어옵니다.
            return result;
        }
 
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            try {
                //넘어온 result 값을 JSONObject 로 변환해주고, 값을 가져오면 되는데요.
                // result 를 Log에 찍어보면 어떻게 가져와야할 지 감이 오실거에요.
                JSONObject object = new JSONObject(result);
                if(object.getString("resultcode").equals("00")) {
                    JSONObject jsonObject = new JSONObject(object.getString("response"));
                    Log.d("jsonObject", jsonObject.toString());
                    SharedPreferences.Editor editor = activity.userData.edit();
                    editor.putString("email", jsonObject.getString("email"));
                    editor.putString("name", jsonObject.getString("name"));
                    editor.putString("nickname", jsonObject.getString("nickname"));
                    editor.putString("profile", jsonObject.getString("profile_image"));
                    editor.apply();
                    Intent intent = new Intent(activity, MainActivity.class);
                    activity.startActivity(intent);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
cs


별로 어렵지 않죠?


네이버 아이디 로그인  첫 번째 포스팅을 보고 나서 하시면 크게 어렵지 않으실거에요.


궁금하신 점은 댓글로 남겨주세요~


감사합니다.




반응형