밍쯔와 안작고 안귀여운 에러들🖤

[Android/Java] kakao SDK v1 -> v2 마이그레이션 본문

Develop/Android | iOS

[Android/Java] kakao SDK v1 -> v2 마이그레이션

밍쯔 2023. 5. 11. 18:05

안드로이드 스튜디오 업데이트 하다가, 이제야 SDK 마이그레이션 시켜야한다는 걸 알았다•••

그 전까지는 원래 설치되어 있던 v1이 있어서 문제가 없었는데

이제야 발견된 것,,,!! 아직 감자인데 혼자 어플 작업하는 나는 항상 상황이 닥쳐야 알게되는,,,,,,,,

 

어찌됐든 뒤늦게 발견하는 누군가 or 카카오 로그인 및 공유 개발을 해야하는 사람들에게 

TINY한 도움을 주기 위해.. 아니면 미래의 나?

 

이거 때문에 다른 작업 밀렸다구우~~~

로그인이랑 그 수많은 공유들 다 바꾼다고 시간 마이 깎아먹어따.. 됴륵,,

 

 

 

 

[v1] getCurrentSession().close();

public void initLogin(){
	...
	Session.getCurrentSession().close();
    }

[v2]

UserApiClient.getInstance().logout(error -> {
            if (error != null) {
                Log.e(TAG, "로그아웃 실패. SDK에서 토큰 삭제됨", error);
            } else {
                Log.i(TAG, "로그아웃 성공. SDK에서 토큰 삭제됨");
            }
            return null;
        });

 

 

[v1] 카카오 로그인 및 회원가입

kakaoCallback = new KakaoSessionCallback(viewModel);
Session.getCurrentSession().addCallback(kakaoCallback);
Session.getCurrentSession().checkAndImplicitOpen();

// KakaoSessionCallback(ISessionCallback). KakaoSDKAdapter(KakaoAdapter)

[v2]

public void setKakaoCallback() {
        Function2<OAuthToken, Throwable, Unit> callback = new Function2<OAuthToken, Throwable, Unit>() {
            @Override
            public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
                if (oAuthToken != null) {
                    Log.i("user", oAuthToken.getAccessToken() + " " + oAuthToken.getRefreshToken());
                    updateKakaoLoginUi(oAuthToken.getAccessToken());
                } else if (throwable != null) {
                    Log.w("kakao", "invoke: " + throwable.getLocalizedMessage());
                    Toast.makeText(getApplicationContext(), "카카오 회원 정보 접근 권한을 가져오는데 실패했습니다.", Toast.LENGTH_SHORT).show();
                }
                return null;
            }
        };

        binding.kakaoLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(LoginActivity.this)) {
                    // 카카오톡이 있을 경우
                    UserApiClient.getInstance().loginWithKakaoTalk(LoginActivity.this, callback);
                } else {
                    UserApiClient.getInstance().loginWithKakaoAccount(LoginActivity.this, callback);
                }
            }
        });
    }

    public void updateKakaoLoginUi(String accessToken) {
        // 카카오 UI 가져오는 메소드 (로그인 핵심 기능)
        UserApiClient.getInstance().me(new Function2<User, Throwable, Unit>() {
            @Override
            public Unit invoke(User user, Throwable throwable) {
                if (user != null) {
                	// user 내 필요한 정보를 받고, 계정 확인 이후 진행할 내용 작성
                    Log.w("kakao", "user: " + user.getKakaoAccount().getEmail());
                	// set userDTO
                    // 회원가입 request 실행
                 
                } else if (throwable != null) {
                    Toast.makeText(getApplicationContext(), "카카오 유저 정보를 불러오는데 실패했습니다.", Toast.LENGTH_SHORT).show();
                    Log.w("kakao", "invoke: " + throwable.getLocalizedMessage());
                }
                return null;
            }
        });
    }

 

 

[v1] auth session을 위한 handleActivityResult

if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
            return;
        }

[v2] manifest에 추가. ("kakao+App key"임! 주의!)

<activity
            android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            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" />

                <!-- Redirect URI: "kakao${NATIVE_APP_KEY}://oauth" -->
                <data android:host="oauth"
                    android:scheme="@string/kakao_scheme" />
            </intent-filter>
        </activity>

https://developers.kakao.com/docs/latest/ko/kakaologin/android#set-redirect-uri

 

 

[v1] 카카오 공유 : FeedTemplate

        FeedTemplate params = FeedTemplate
                .newBuilder(ContentObject.newBuilder(userNm + getString(R.string.board_shared_by), url,
                        LinkObject.newBuilder().setWebUrl("https://developers.kakao.com")
                                .setMobileWebUrl("https://developers.kakao.com")
                                .setAndroidExecutionParams(urlstring)
                                .setIosExecutionParams(urlstring)
                                .build())
                        .setDescrption(desc)
                        .build())
                .addButton(new ButtonObject(getString(R.string.more_on_app), LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .setAndroidExecutionParams(urlstring)
                        .setIosExecutionParams(urlstring)
                        .build()))
                .build();

[v2]

Map<String, String> params = new HashMap<String, String>();
params.put("StoreSn", storeSn);

FeedTemplate template = new FeedTemplate(
	new Content("타이틀",
    	imageUrl, new Link("https://developers.kakao.com",
        "https://developers.kakao.com",
        androidParams, iosParams), "상세 설명"
     ),
     null(itemContent), null(social),
     null(buttons), "버튼 텍스트"
);

https://developers.kakao.com/docs/latest/ko/message/message-template#type

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

[v1] 카카오 공유 : kakaoLinkService 보내기 (SDK 2.11.0부터는 link -> share)

KakaoLinkService.getInstance().sendDefault(this, params, serverCallbackArgs, new ResponseCallback<KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {
                Logger.e(errorResult.toString());
            }

            @Override
            public void onSuccess(KakaoLinkResponse result) {
                // 템플릿 밸리데이션과 쿼터 체크가 성공적으로 끝남. 톡에서 정상적으로 보내졌는지 보장은 할 수 없다. 전송 성공 유무는 서버콜백 기능을 이용하여야 한다.
            }
        });

[v2]

Map<String, String> serverCallbackArgs = new HashMap<>();
serverCallbackArgs.put("user_id", "${current_user_id}");
serverCallbackArgs.put("product_id", "${shared_product_id}");

ShareClient.getInstance().shareDefault(this, template, serverCallbackArgs, new Function2<SharingResult, Throwable, Unit>() {
	@Override
    public Unit invoke(SharingResult sharingResult, Throwable throwable) {
    	if (sharingResult != null) {
        	Log.w("kakao share", "success: " + sharingResult.getIntent());
            startActivity(sharingResult.getIntent());
        } else if (throwable != null) {
             Log.w("kakao share", "invoke: " + throwable.getLocalizedMessage());
        }
        eturn null;
    }
});

https://developers.kakao.com/docs/latest/ko/message/android-link#before-you-begin

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com