카카오톡으로 로그인 문제

이클립스 환경에서 sdk 1.1.7 버전으로 하고 있는데 Session is not initalized. call KakaoSDK#init first. 라는 오류가 나옵니다. Session를 초기화 해줘야 하는건 알겠는데… 개발자 문서를 봐도 도저히 모르겠습니다. 어떻게 초기화를 해야할지 ;; 개발자 문서에 나오는 초기화 방법을 써봐도 안되고…도와주세요

Application 상속받은 class의 onCreate에서 KakaoSDK.init()을 해주세요~ 개발 문서에도 있고 sample에도 있으니 참고하시면 될꺼에요~ sample은 full 프로젝트 안에 있습니다.(gradle기반)

[quote=“shinleo, post:2, topic:17586”]
KakaoSDK.init()
[/quote]
KakaoSDK.init()를 써주면 kakaoSDK.init(Kakaoadapter)를 해줘여 되는데 이게 new KaKaoadater 를 써줘야 하는데 여기서 빨간줄 나고 오류 나는데 …ㅠ.ㅠ

param으로 KakaoAdapter가 들어가는데 그 부분을 구현해 주셔야죠…ㅠ
https://developers.kakao.com/docs/android#사용자-관리-로그인 여기 참고하시면 도움이 될거 같네요~

잉? ㅠ.ㅠ 제가 멍청해서… 개발자 가이드를 봐도… ㅠ.ㅠ 모르겠는데 바쁘시겠지만 ㅠ.ㅠ 자세한 설명 부탁드려도 되나요 ㅠ.ㅠ

아래와 같이 KakaoAdapter를 상속해서 KakaoSDKAdapter같은 adapter를 init때 넣어주셔야 해요. 그러면 sdk내부에서 전달받은 adapter의 method들을 호출하여 application에서 필요한 정보를 가져갈 수 있게됩니다.
참고로 위에 코드를 보니 activity에서 init을 해주고 있는데요 Application에서 하는 이유는 여러번 init을 방지하기 위함이니 앱이 구동되었을때 최초 한번만 init을 해주시면됩니다~~

public class GlobalApplication extends Application {
private static class KakaoSDKAdapter extends KakaoAdapter {
/**
* Session Config에 대해서는 default값들이 존재한다.
* 필요한 상황에서만 override해서 사용하면 됨.
* @return Session의 설정값.
*/
@Override
public ISessionConfig getSessionConfig() {
return new ISessionConfig() {
@Override
public AuthType getAuthTypes() {
return new AuthType {AuthType.KAKAO_LOGIN_ALL};
}

            @Override
            public boolean isUsingWebviewTimer() {
                return false;
            }
            @Override
            public ApprovalType getApprovalType() {
                return ApprovalType.INDIVIDUAL;
            }
            @Override
            public boolean isSaveFormData() {
                return true;
            }
        };
    }
    @Override
    public IApplicationConfig getApplicationConfig() {
        return new IApplicationConfig() {
            @Override
            public Activity getTopActivity() {
                return GlobalApplication.getCurrentActivity();
            }
            @Override
            public Context getApplicationContext() {
                return GlobalApplication.getGlobalApplicationContext();
            }
        };
    }
}
public static Activity getCurrentActivity() {
    return currentActivity;
}
// Activity가 올라올때마다 Activity의 onCreate에서 호출해줘야한다.
public static void setCurrentActivity(Activity currentActivity) {
    GlobalApplication.currentActivity = currentActivity;
}
@Override
public void onCreate() {
    super.onCreate();
    KakaoSDK.init(new KakaoSDKAdapter());
    ...
}
...

}

class GlobalApplication 클래스를 답변과 같이 만들어 놓고 앱이 최초 구동 되는 intro Activity 에서 KakaoSDK.init(new KakaoSDKAdapter()); 을 하면 된다는거죠? ㅠㅠ 바쁜신데 답변 감사합니다!

음 아니요… Application을 상속받은 class를 AndroidManifest.xml 에 연결해주시면 앱이 시작될때 onCreate가 불릴꺼에요~ 그때 init을 해주시면 됩니다~! 아래와 같은식으로 연결이 되요~


<application
        android:theme="@android:style/Theme.NoTitleBar"
        android:name="com.kakao.sdk.sample.common.GlobalApplication"
        android:label="@string/app_name">
</application>

감사합니다 해결 했습니다! 감사합니다 ㅠ.ㅠ 근데 마지막으로 딱 하나만 더 물어볼께요

onActivityResult 에서 카카오톡 로그인이 끝나고 다시 앱으로 들어올 때 requestMe 함수 (개발자 가이드) 보고 호출해서 사용자 닉네임을 가져오고 싶은데 전혀 아무런 이벤트도 발생하지 않아서… 혹시 제가 잘못 알고 있는건지… 개발자 가이드를 봐도 이해가 잘안되서 ㅠ.ㅠ 죄송합니다

onActivityResult 로 들어온다고 세션키 발급이 끝난것이 아니에요~ SessionCallback의 onSessonOpend가 불려야만 세션이 오픈된 것이니 그때가 되어야 requestMe를 할 수 있는거입니다.

감사합니다. 그런데 로그인 Activitiy 에서
callback = new SessionCallback();
Session.getCurrentSession().addCallback(callback);
Session.getCurrentSession().checkAndImplicitOpen();

등록하고 카카오 로그인을 한 후 동의를 누르면 이 callback 함수에서 말씀하신 onsessonopend 가 들어오지않는데… 제대로 로그인이 되지 않아서 인가요? 아니면 콜백 등록을 잘못한건가요?

onSessionOpenFailed 로 들어오넹;; on SesstionOpenFailed 에 들어오는 이유는 뭔가요?

로그인실패한거죠~ ㅋ fail로그를 확인해 보세요 왜 fail되었는지ㅋ

ㅋㅋ 네 로그를 확인해봤는데 android hash key? 이걸 말하는거 같은데 해쉬 키 추출해서 카카오톡에서 저장했는데도 오류가 나서요 hash key 를 잘못 써서 오류난거 겠죠?

그렇겠네요 해시키는 추출해서 데브사이트에 등록을 해줘야합니다. 카카오톡에 저장하는게 아니구요…ㅠ
https://developers.kakao.com/docs/android#시작하기-앱-생성 여기에 등록해 주셔야 합니다. debug, release 둘다요~