[Android/SDK연동]SNS 로그인 구현(1) - 네이버

2021. 5. 10. 18:47Android/튜토리얼 및 가이드

728x90
반응형

1. Naver Developer에서 네이버 로그인 연동 API 개발 신청을 한다.

 

네이버 아이디로 로그인 - INTRO

환영합니다 네아로의 올바른 적용방법을 알아볼까요? 네이버 아이디로 로그인을 통해 신규 회원을 늘리고, 기존 회원은 간편하게 로그인하게 하려면 제대로 적용하는 것이 중요합니다! 이에 올

developers.naver.com

* 현재 url이 없는 경우 아무 url이나 추가 후 나중에 배포 시 url 변경

 

2. 개발 환경 설정 - 네이버 로그인 sdk.aar 파일 다운로드 & build.gradle 의존성 추가

 

Releases · naver/naveridlogin-sdk-android

네이버 아이디로 로그인 SDK (안드로이드). Contribute to naver/naveridlogin-sdk-android development by creating an account on GitHub.

github.com

* 여기서 Source code (zip) 다운로드 후 압축 풀기 -> \naveridlogin-sdk-android-4.2.6\naveridlogin_android_sdk 내 aar 파일을 libs 파일에 옮김

implementation files('libs/naveridlogin_android_sdk_4.2.6.aar')    //네이버 로그인

* 위 파일 의존성 추가

2-1) 네이버 Deverloper에는 의존성이 아래와 같이 나와있다.

compile 'com.android.support:appcompat-v7:28.0.0'
compile 'com.android.support:support-core-utils:28.0.0'
compile 'com.android.support:customtabs:28.0.0'
compile 'com.android.support:support-v4:28.0.0'

* 안드로이드는 더이상 compile을 지원하지 않으므로 compile을 지원하지 않으므로 이를 implementaion으로 변경해도 여전히 오류가 난다.

오류코드: Version 28 (intended for Android Pie and below) is the last version of the legacy support library, so we recommend that you migrate to AndroidX libraries when using Android Q and moving forward. The IDE can help with this: Refactor > Migrate to AndroidX

Version 28에서는 다음과 같은 의존성을 지원하지 않는다는 뜻으로, Refactor>Migrate to AndroidX...를 해준 뒤 하단에서 Migration을 한번 더 눌러주면 다음과 같이 마이그레이션이 되어 소스가 적용된다.

implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
implementation 'androidx.browser:browser:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
이거 알아내는데 이틀이 걸렸다...

 

3. AndroidManifest.xml에 인터넷 사용 권한을 준다.

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

 

4. 일일히 client_id/client_secret 등을 설정하는 대신 strings.xml에 미리 등록해둔다.

<resources>
    <string name="app_name">SnsLoginTest</string>
    <string name="naver_client_id">client_id명</string>
    <string name="naver_client_secret">client_secret번호</string>
    <string name="naver_client_name">아무거나</string>
</resources>

 

5. 버튼을 미리 저장해둔 후 해당 버튼을 사용하여 레이아웃을 만든다.

 

로그인 버튼 사용 가이드 - LOGIN

네이버 아이디로 로그인은 애플리케이션에 사용할 수 있는 네이버 로그인 버튼 기본 이미지를 제공합니다. 애플리케이션의 상황에 맞게 버튼 이미지의 디자인을 변경할 수 있지만 네이버 고유

developers.naver.com

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</LinearLayout>

 

6. 네이버 아이디로 로그인 라이브러리 애플리케이션에 적용하기 위해 로그인 인스턴스 초기화

    public static OAuthLogin mOAuthLoginModule;
    public static Context mContext;
    public static OAuthLoginButton mOAuthLoginButton;

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

        mContext = getApplicationContext();

        // 초기화
        mOAuthLoginModule = OAuthLogin.getInstance();
        mOAuthLoginModule.init(
                mContext
                ,getString(R.string.naver_client_id)
                ,getString(R.string.naver_client_secret)
                ,getString(R.string.naver_client_name)
        );

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

* OAuthLogin.init() 메서드가 여러 번 실행돼도 기존에 저장된 접근 토큰(access token)과 갱신 토큰(refresh token)은 삭제되지 않습니다.
* 기존에 저장된 접근 토큰과 갱신 토큰을 삭제하려면 OAuthLogin.logout() 메서드나 OAuthLogin.logoutAndDeleteToken() 메서드를 호출합니다.

 

7. 로그인 로직을 구현합니다.

    static private OAuthLoginHandler mOAuthLoginHandler = new OAuthLoginHandler() {
        @Override
        public void run(boolean success) {

            if (success) {
                String accessToken = mOAuthLoginModule.getAccessToken(mContext);
                String refreshToken = mOAuthLoginModule.getRefreshToken(mContext);
                long expiresAt = mOAuthLoginModule.getExpiresAt(mContext);
                String tokenType = mOAuthLoginModule.getTokenType(mContext);

                Log.i("LoginData","accessToken : "+ accessToken);
                Log.i("LoginData","refreshToken : "+ refreshToken);
                Log.i("LoginData","expiresAt : "+ expiresAt);
                Log.i("LoginData","tokenType : "+ tokenType);

            } else {
                String errorCode = mOAuthLoginModule
                        .getLastErrorCode(mContext).getCode();
                String errorDesc = mOAuthLoginModule.getLastErrorDesc(mContext);
                Toast.makeText(mContext, "errorCode:" + errorCode
                        + ", errorDesc:" + errorDesc, Toast.LENGTH_SHORT).show();
            }
        }
    };

 

728x90
반응형