본문 바로가기

프로그래밍/안드로이드[Android]

[Android]네아로, 네이버로 로그인 서비스 구현 [2/2]



우선 네아로를 사용하기 위한 이전 글입니다. 처음 들어오신 분들은 아래의 글을 먼저 참고하시기 바랍니다.

 

 

[Android]네아로, 네이버로 로그인 서비스 구현 [1/2]

오늘은 네이버 아이디로 로그인 서비스인 일명 네아로를 안드로이드 앱(App)에 구현을 해보도록 하겠습니다. 요구사항 우선 네아로를 사용하기 위해선 다음과 같은 요구 사항이 충족되어야 합니

baessi.tistory.com

 

로그인 구현

아래의 코드는 참고만 하시고 전체 코드는 마지막 부분에 올려두도록 하겠습니다.

 

자 그럼 이제 사용하고자 할 액티비티와 레이아웃을 생성합니다.

 

저는 간단하게 NaverLoginActivity로 파일을 생성했습니다.

 

그리고 해당 레이아웃 파일에 다음과 같은 구문을 추가합니다.

<com.nhn.android.naverlogin.ui.view.OAuthLoginButton
      android:id="@+id/buttonOAuthLoginImg"
      android:layout_width="wrap_content"
      android:layout_height="50dp" />

 

 

레이아웃을 확인해 보면 다음과 같이 네아로 버튼을 확인할 수 있습니다.

 

 

추가적으로 네아로 버튼을 커스텀을 하고싶으시다면 아래의 링크를 참고해서 커스텀을 진행하시면 됩니다.

 

저도 추 후 다른 게시글로 네아로 버튼 커스텀을 다뤄보도록 하겠습니다.

 

간단한 이미지 변경은 코드내에서도 가능합니다. 전체 코드의 주석 부분을 확인해 주세요.

 

 

네이버아이디로로그인 로그인 버튼 사용 가이드

NAVER Developers - 네이버아이디로로그인 로그인 버튼 사용 가이드

developers.naver.com

다음으로 클래스 부분에 아래와 같은 코드를 작성합니다.

 

public class NaverLoginActivity {
    //client 정보
    private static String OAUTH_CLIENT_ID = "본인의 Client ID 입력";
    private static String OAUTH_CLIENT_SECRET = "본인의 Client Secret Key 입력";
    private static String OAUTH_CLIENT_NAME = "애플리케이션 이름 입력";
}

 

정보는 네이버 디벨로퍼에서 확인이 가능합니다.

 

애플리케이션 이름은 네아로 회원가입시 보일 이름입니다.

 

이름에 따라 아래의 네모칸이 변경됩니다.

 

 

다음으로 초기화 메소드를 작성합니다.

 

initData()로 작성하도록 하겠습니다.

 

public class NaverLoginActivity extends AppCompatActivity {
    private static OAuthLogin mOAuthLoginInstance;
    private static Context mContext;
}
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_naver_login);
        
        mContext=this;
        
        //초기화
        initData();
    }
    private void initData() {
        //초기화
        mOAuthLoginInstance = OAuthLogin.getInstance();
        mOAuthLoginInstance.init(mContext, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_CLIENT_NAME);

        mOAuthLoginButton = (OAuthLoginButton) findViewById(R.id.buttonOAuthLoginImg);
        mOAuthLoginButton.setOAuthLoginHandler(mOAuthLoginHandler);

        //custom img 변경시 사용
        //mOAuthLoginButton.setBgResourceId(R.drawable.btn_naver_white_kor);
    }

 

custom img 변경시 주석 부분의 코드를 사용하면 다음과 같이 원하는 이미지로 변경이 가능합니다.

 

위에서 언급했다시피 네이버에서 제공하는 다른 버전의 이미지를 다운로드하여 변경했습니다.

 

본인이 원하시는대로 변경하실경우 반드시 가이드에 따라서 변경해주세요.

 

 

다음은 mOAuthLoginHandler 부분을 작성하도록 하겠습니다.

 

    /**
     * OAuthLoginHandler를 startOAuthLoginActivity() 메서드 호출 시 파라미터로 전달하거나 OAuthLoginButton
     객체에 등록하면 인증이 종료되는 것을 확인할 수 있습니다.
     */
    private OAuthLoginHandler mOAuthLoginHandler = new OAuthLoginHandler() {
        @Override
        public void run(boolean success) {
            if (success) {
                String accessToken = mOAuthLoginInstance.getAccessToken(mContext);
                String refreshToken = mOAuthLoginInstance.getRefreshToken(mContext);
                long expiresAt = mOAuthLoginInstance.getExpiresAt(mContext);
                String tokenType = mOAuthLoginInstance.getTokenType(mContext);
//                mOauthAT.setText(accessToken);
//                mOauthRT.setText(refreshToken);
//                mOauthExpires.setText(String.valueOf(expiresAt));
//                mOauthTokenType.setText(tokenType);
//                mOAuthState.setText(mOAuthLoginInstance.getState(mContext).toString());
                Toast.makeText(mContext, "success:" + accessToken, Toast.LENGTH_SHORT).show();
                
                //본인이 이동할 액티비티를 입력
                redirectSignupActivity();
            } else {
                String errorCode = mOAuthLoginInstance.getLastErrorCode(mContext).getCode();
                String errorDesc = mOAuthLoginInstance.getLastErrorDesc(mContext);
                Toast.makeText(mContext, "errorCode:" + errorCode
                        + ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();
            }
        };
    };

 

아래는 본인이 회원가입이 정상적으로 완료된 후에 이동할 액티비티입니다.

 

저는 임의로 NaverAfterActivity를 생성하여 확인했습니다.

 

    // 성공 후 이동할 액티비티
    protected void redirectSignupActivity() {
        final Intent intent = new Intent(this, NaverAfterActivity.class);
        startActivity(intent);
        finish();
    }

 

자 이렇게 하고 최종적으로 네이버 버튼을 클릭했을 때 정상적으로 액티비티가 이동이 되는지 확인하면 로그인 구현은 끝입니다.

 

 

아래는 참고용으로 올려둔 전체 소스입니다.

 

public class NaverLoginActivity extends AppCompatActivity {
    private static final String TAG = "NaverLoginActivity";

    //client 정보
    private static String OAUTH_CLIENT_ID = "본인의 Client ID 입력";
    private static String OAUTH_CLIENT_SECRET = "본인의 Client Secret Key 입력";
    private static String OAUTH_CLIENT_NAME = "애플리케이션 이름 입력";

    private static OAuthLogin mOAuthLoginInstance;
    private static Context mContext;

    private OAuthLoginButton mOAuthLoginButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_naver_login);
       
        mContext=this;

        //초기화
        initData();        
    }

    private void initData() {
        //초기화
        mOAuthLoginInstance = OAuthLogin.getInstance();
        mOAuthLoginInstance.init(mContext, OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_CLIENT_NAME);

        mOAuthLoginButton = (OAuthLoginButton) findViewById(R.id.buttonOAuthLoginImg);
        mOAuthLoginButton.setOAuthLoginHandler(mOAuthLoginHandler);

        //custom img로 변경시 사용
        //mOAuthLoginButton.setBgResourceId(R.drawable.btn_naver_white_kor);
    }

    /**
     * OAuthLoginHandler를 startOAuthLoginActivity() 메서드 호출 시 파라미터로 전달하거나 OAuthLoginButton
     객체에 등록하면 인증이 종료되는 것을 확인할 수 있습니다.
     */
    private OAuthLoginHandler mOAuthLoginHandler = new OAuthLoginHandler() {
        @Override
        public void run(boolean success) {
            if (success) {
                //String accessToken = mOAuthLoginInstance.getAccessToken(mContext);
                //String refreshToken = mOAuthLoginInstance.getRefreshToken(mContext);
                //long expiresAt = mOAuthLoginInstance.getExpiresAt(mContext);
                //String tokenType = mOAuthLoginInstance.getTokenType(mContext);
                //mOauthRT.setText(refreshToken);
                //mOauthExpires.setText(String.valueOf(expiresAt));
                //mOauthTokenType.setText(tokenType);
                //mOAuthState.setText(mOAuthLoginInstance.getState(mContext).toString());
               
                redirectSignupActivity();
            } else {
                String errorCode = mOAuthLoginInstance.getLastErrorCode(mContext).getCode();
                String errorDesc = mOAuthLoginInstance.getLastErrorDesc(mContext);
                Toast.makeText(mContext, "errorCode:" + errorCode + ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();
            }
        };
    };
    
    // 성공 후 이동할 액티비티
    protected void redirectSignupActivity() {
        final Intent intent = new Intent(this, NaverAfterActivity.class);
        startActivity(intent);
        finish();
    }
}

 

감사합니다.