package com.test.kakaotest;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.kakao.auth.AuthType;
import com.kakao.auth.ISessionCallback;
import com.kakao.network.ErrorResult;
import com.kakao.usermgmt.UserManagement;
import com.kakao.usermgmt.callback.MeResponseCallback;
import com.kakao.usermgmt.response.model.UserProfile;
import com.kakao.util.exception.KakaoException;
import com.squareup.picasso.Picasso;
import java.security.MessageDigest;
public class KakaoTalkMainActivity extends Activity {
private SessionCallback mKakaocallback;
// view
private Button login_button;
private TextView tv_user_id;
private TextView tv_user_name;
private ImageView iv_user_profile;
private String userName;
private String userId;
private String profileUrl;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 헤쉬키를 가져온다
getAppKeyHash();
tv_user_id = (TextView) findViewById(R.id.tv_user_id);
tv_user_name = (TextView) findViewById(R.id.tv_user_name);
iv_user_profile = (ImageView) findViewById(R.id.iv_user_profile);
login_button = (Button) findViewById(R.id.login_button);
login_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 카카오 로그인 요청
isKakaoLogin();
}
});
}
private void isKakaoLogin() {
// 카카오 세션을 오픈한다
mKakaocallback = new SessionCallback();
com.kakao.auth.Session.getCurrentSession().addCallback(mKakaocallback);
com.kakao.auth.Session.getCurrentSession().checkAndImplicitOpen();
com.kakao.auth.Session.getCurrentSession().open(AuthType.KAKAO_TALK_EXCLUDE_NATIVE_LOGIN, KakaoTalkMainActivity.this);
}
private class SessionCallback implements ISessionCallback {
@Override
public void onSessionOpened() {
Log.d("TAG" , "세션 오픈됨");
// 사용자 정보를 가져옴, 회원가입 미가입시 자동가입 시킴
KakaorequestMe();
}
@Override
public void onSessionOpenFailed(KakaoException exception) {
if(exception != null) {
Log.d("TAG" , exception.getMessage());
}
}
}
/**
* 사용자의 상태를 알아 보기 위해 me API 호출을 한다.
*/
protected void KakaorequestMe() {
UserManagement.requestMe(new MeResponseCallback() {
@Override
public void onFailure(ErrorResult errorResult) {
int ErrorCode = errorResult.getErrorCode();
int ClientErrorCode = -777;
if (ErrorCode == ClientErrorCode) {
Toast.makeText(getApplicationContext(), "카카오톡 서버의 네트워크가 불안정합니다. 잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show();
} else {
Log.d("TAG" , "오류로 카카오로그인 실패 ");
}
}
@Override
public void onSessionClosed(ErrorResult errorResult) {
Log.d("TAG" , "오류로 카카오로그인 실패 ");
}
@Override
public void onSuccess(UserProfile userProfile) {
profileUrl = userProfile.getProfileImagePath();
userId = String.valueOf(userProfile.getId());
userName = userProfile.getNickname();
setLayoutText();
}
@Override
public void onNotSignedUp() {
// 자동가입이 아닐경우 동의창
}
});
}
private void setLayoutText(){
tv_user_id.setText(userId);
tv_user_name.setText(userName);
Picasso.with(this)
.load(profileUrl)
.fit()
.into(iv_user_profile);
}
private void getAppKeyHash() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
Log.d("Hash key", something);
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("name not found", e.toString());
}
}
}