밍쯔와 안작고 안귀여운 에러들🖤
[Android/Java] kakao SDK v1 -> v2 마이그레이션 본문
안드로이드 스튜디오 업데이트 하다가, 이제야 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
[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
'Develop > Android | iOS' 카테고리의 다른 글
[Android/Java] mapView, naverMapFragment in ScrollView (0) | 2023.07.31 |
---|---|
[Android] FlexboxLayout, RecyclerView - 자연스럽게 쌓이는 뷰 (0) | 2023.06.28 |
[Android/Java] flamingo 업데이트 후, Execution failed for task ':app:kaptDebugKotlin' 에러 (0) | 2023.05.11 |
[Android/Java] RecyclerView Horizontal만 안되는 문제 (1) | 2023.05.08 |
[Android] UndeliverableException / Rxjava (0) | 2023.05.04 |