GwonHyeok / ionic-plugin-kakaotalk

아이오닉 카카오톡 플러그인
0 stars 0 forks source link

kakaoTalk.login()의 return 값 #1

Closed Kim-SooYoung closed 6 years ago

Kim-SooYoung commented 7 years ago

kakaoTalk.login()의 return 값으로 login 사용자의 email값을 가져올 수 없을까요?

GwonHyeok commented 7 years ago

@Kim-SooYoung

제가 아직 Readme.md 를 업데이트 하지 않아 사용에 불편함이 있는 것 같네요

로그인 성공시 유저의 액세스 토큰과 정보를 가져오려면 다음과 같이 사용할 수 있습니다

this.kakaoTalk.login()
      .then(response => {
        // 로그인 결과와 엑세스 토큰을 promise 형태로 반환한다
        return new Promise(resolve => {
          this.kakaoTalk.getAccessToken().then(accessToken => resolve(Object.assign({}, response, { accessToken })))
        })
      })
      .then(({ accessToken, id, nickname, profile_image }) => {
        // 유저 정보를 출력
        console.log(accessToken, id, nickname, profile_image);
      })
      .catch(error => console.error(error));
Kim-SooYoung commented 7 years ago

GwonHyeok님, 신속한 답변에 감사드립니다.

kakao에서 사용자의 카카오계정 이메일을 얻어올 수 있는 기능이 있는 것 같습니다. (참고: https://developers.kakao.com/docs/ios/user-management 의 사용자 정보 요청 부분) 이것을 기반으로 제 컴퓨터에 설치한 cordova-plugin-ghyeok-kakaotalk/src/ios/KakaoTalk.m을 아래와 같이 수정하니

if (result) { // success NSLog(@"userId=%@", result.ID); NSLog(@"nickName=%@", [result propertyForKey:@"nickname"]); NSLog(@"profileImage=%@", [result propertyForKey:@"profile_image"]); if (result.email) { NSLog(@"email=%@", result.email); } NSDictionary *userSession = @{ @"id": result.ID, @"nickname": [result propertyForKey:@"nickname"], @"profile_image": [result propertyForKey:@"profile_image"], @"email": result.email}; pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:userSession]; }

Xcode console에서 email부분을 확인 할 수 있었는데, return 값은 undefined로 나타납니다. 저는 ionic 응용 프로그램만 좀 할 줄 알지 다른 것은 잘 모릅니다..... 어떻게 해야 email값을 얻을 수 있을까요?

GwonHyeok commented 7 years ago

@Kim-SooYoung

수정은 제대로 하신 것 같은데 email이 undefined 가 나오는건가요 ?

cordova plugin result 로 이메일 정보가 제대로 넘어온다면 아래처럼 사용하면 될 것 같습니다

this.kakaoTalk.login()
      .then(response => {
        // 로그인 결과와 엑세스 토큰을 promise 형태로 반환한다
        return new Promise(resolve => {
          this.kakaoTalk.getAccessToken().then(accessToken => resolve(Object.assign({}, response, { accessToken })))
        })
      })
      .then(({ accessToken, id, email, nickname, profile_image }) => {
        // 유저 정보를 출력 이메일 항목 추가
        console.log(accessToken, id, email , nickname, profile_image);
      })
      .catch(error => console.error(error));