Code Monkey home page Code Monkey logo

ionic-plugin-naver's Introduction

ionic-plugin-naver

네이버 cordova 플러그인을 ionic 에서 사용할 수 있게 만든 플러그인 입니다

설치 하기전에 앞서서

해당 플러그인을 사용하기 앞서 네이버 개발자 센터에서 앱을 등록하여

OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_CLIENT_NAME 값을 알아놓아야 합니다

최신 버전 확인

설치 방법

  • cordova 플러그인 추가
$ ionic cordova plugin add cordova-plugin-naver --save --variable OAUTH_CLIENT_ID="OAUTH_CLIENT_ID" --variable OAUTH_CLIENT_SECRET="OAUTH_CLIENT_SECRET" --variable OAUTH_CLIENT_NAME="OAUTH_CLIENT_NAME"
  • ionic 플러그인 설치
$ npm install ionic-plugin-naver --save

만약 OAUTH_CLIENT_ID, OAUTH_CLIENT_SECRET, OAUTH_CLIENT_NAME 등의 값이 해당 플러그인 추가 후 변경된다면 플러그인 삭제후 다시 추가하는 것을 추천 드립니다.

안드로이드

안드로이드 플랫폼을 지원하실 경우에 네이버 개발자 센터에서 앱을 등록한 후

로그인 API 환경에 안드로이드를 추가하고 안드로이드

앱 페키지 이름을 아이오닉 프로젝트 페키지 이름과 일치시켜주면 됩니다.

아이폰

개발자 센터 설정

아이폰 플랫폼을 지원하실 경우에 네이버 개발자 센터에서 앱을 등록한 후 로그인 API 환경에 iOS를 추가합니다

아이폰의 경우에는 안드로이드와 다르게 URL Scheme을 추가 해주셔야 합니다.

URL Scheme 형식은 자동으로 naver-cordova-plugin 에서 만들게 되며 형식은 다음과 같습니다.

naver$OAUTH_CLIENT_ID

가장 앞에 naver가 있고 바로 뒤에는 OAUTH_CLIENT_ID가 붙게 됩니다.

예를 들면 OAUTH_CLIENT_ID가 AB_CDEFGHI이라면 Scheme은 naverAB_CDEFGHI가 됩니다.

즉 개발자 센터에서 URL Scheme 항목에 naverAB_CDEFGHI을 추가해주시면 됩니다.

XCode 프로젝트 설정

불행하게도 아이폰앱은 AppDelegate에 코드를 추가 해주셔야 합니다.

#import "NaverThirdPartyLoginConnection.h"
#define NAVER_APP_SCHEME [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NaverAppScheme"]
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  return [self handleWithUrl:url];
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_8_4
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
  return [self handleWithUrl:url];
}
#endif

- (BOOL)handleWithUrl:(NSURL *)url {
  if ([[url scheme] isEqualToString:NAVER_APP_SCHEME]) {
    if ([[url host] isEqualToString:kCheckResultPage]) {
            
      // 네이버앱으로부터 전달받은 url값을 NaverThirdPartyLoginConnection의 인스턴스에 전달
      NaverThirdPartyLoginConnection *thirdConnection = [NaverThirdPartyLoginConnection getSharedInstance];
      THIRDPARTYLOGIN_RECEIVE_TYPE resultType = [thirdConnection receiveAccessToken:url];
            
      if (SUCCESS == resultType) {
        NSLog(@"Getting auth code from NaverApp success!");
      } else {
        // 앱에서 resultType에 따라 실패 처리한다.
      }
    }
    return YES;
  }
  
  return NO;
}

ionic 설정

모듈의 providers 항목에 Naver를 추가해주세요.

app.module.ts

import { Naver } from "ionic-plugin-naver";

@NgModule({
  providers: [
    Naver
  ]
})
export class AppModule {
}

해당 플러그인을 컴포넌트에서 사용하기 위해서는 constructor 에 Naver를 추가해 주세요

my.component.ts

@Component({
  selector: 'page-my',
  templateUrl: 'my.html'
})
export class MyPage {

  constructor(public naver: Naver) {}

  // 로그인 예시
  doLogin() {
    this.naver.login()
      .then(response => console.log(response))
      .catch(error => console.error(error));
  }
}

API

모든 API 정의는 https://github.com/GwonHyeok/cordova-plugin-naver#api에서 확인할 수 있습니다.

해당 문서에서는 콜백 형식으로 설명이 되어있지만 ionic에서는 promise 형식으로 사용할 수 있습니다.

예를 들면 다음과 같습니다

// 로그인
doLogin() {
  this.naver.login()
    .then(response => console.log(response)) // 성공
    .catch(error => console.error(error)); // 실패
}

// 내 정보 요청
requestMe() {
  this.naver.requestMe()
    .then(response => console.log(response)) // 성공
    .catch(error => console.error(error)); // 실패
}

// 로그아웃 후 연동해제
doLogout() {
  this.naver.logoutAndDeleteToken()
    .then(response => console.log(response)) // 성공
    .catch(error => console.error(error)); // 실패
}

License

MIT License

Copyright (c) 2017 GwonHyeok

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

ionic-plugin-naver's People

Contributors

gwonhyeok avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ionic-plugin-naver's Issues

AppDelegate를 추가하는 방법은 없을까요?

private project로 개발해뒀던게 있어서 오픈소스가 없으면 공개할까 했는데 이미 이렇게 잘 만들어져있었군요 :)

잘 쓰겠습니다. :)

phonegap-plugin-push의 경우,
AppDelegate+notification.h, AppDelegate+notification.m를 구성하고 plugin.xml에 source file태그로 추가해줬던데,

이런 방법으로는 AppDelegate에 넣어줘야한다는 코드를 패키지 설치했을 때 자동으로 되게 할 수 없을까요?

안드로이드 9.0 버전에서 네아로 로그인시 앱이 종료됩니다.

네이버 아이디로 로그인시 아이디 비번 입력후 개인정보관련 동의를 클릭하면 앱이 종료됩니다.

  • 개발환경

    @ionic/cli-utils : 1.19.2
    ionic (Ionic CLI) : 3.20.0

global packages:

cordova (Cordova CLI) : 8.0.0 

local packages:

@ionic/app-scripts : 3.2.3
Cordova Platforms  : android 8.0.0 ios 4.5.5
Ionic Framework    : ionic-angular 3.9.3

System:

ios-deploy : 1.9.4 
Node       : v10.4.0
npm        : 6.1.0 
OS         : macOS
Xcode      : Xcode 10.2.1 Build version 10E1001 

Environment Variables:

ANDROID_HOME : not set

Misc:

backend : pro
  • 사용 플러그인
    "cordova-plugin-naver": "^1.0.3"
    "ionic-plugin-naver": "^1.0.3"

  • app crash 당시 로그캣 내용

    --------- beginning of crash
    2019-04-30 17:14:24.719 3721-5487/com.tokmom.testapp E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
    Process: com.tokmom.testapp, PID: 3721
    java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:354)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)
    Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/DefaultHttpClient;
    at com.nhn.android.naverlogin.connection.CommonConnection.getDefaultHttpClient(CommonConnection.java:204)
    at com.nhn.android.naverlogin.connection.CommonConnection.getDefaultHttpClient(CommonConnection.java:190)
    at com.nhn.android.naverlogin.connection.CommonConnection.getDefaultHttpClient(CommonConnection.java:186)
    at com.nhn.android.naverlogin.connection.CommonConnection.request(CommonConnection.java:106)
    at com.nhn.android.naverlogin.connection.CommonConnection.request(CommonConnection.java:53)
    at com.nhn.android.naverlogin.connection.CommonConnection.request(CommonConnection.java:44)
    at com.nhn.android.naverlogin.connection.OAuthLoginConnection.request(OAuthLoginConnection.java:52)
    at com.nhn.android.naverlogin.connection.OAuthLoginConnection.requestAccessToken(OAuthLoginConnection.java:34)
    at com.nhn.android.naverlogin.ui.OAuthLoginActivity$GetAccessTokenTask.doInBackground(OAuthLoginActivity.java:310)
    at com.nhn.android.naverlogin.ui.OAuthLoginActivity$GetAccessTokenTask.doInBackground(OAuthLoginActivity.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:333)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:764) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.impl.client.DefaultHttpClient" on path: DexPathList[[zip file "/data/app/com.tokmom.testapp-wNijitTxo3aADtpWBnHHew==/base.apk"],nativeLibraryDirectories=[/data/app/com.tokmom.testapp-wNijitTxo3aADtpWBnHHew==/lib/arm64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at com.nhn.android.naverlogin.connection.CommonConnection.getDefaultHttpClient(CommonConnection.java:204) 
    at com.nhn.android.naverlogin.connection.CommonConnection.getDefaultHttpClient(CommonConnection.java:190) 
    at com.nhn.android.naverlogin.connection.CommonConnection.getDefaultHttpClient(CommonConnection.java:186) 
    at com.nhn.android.naverlogin.connection.CommonConnection.request(CommonConnection.java:106) 
    at com.nhn.android.naverlogin.connection.CommonConnection.request(CommonConnection.java:53) 
    at com.nhn.android.naverlogin.connection.CommonConnection.request(CommonConnection.java:44) 
    at com.nhn.android.naverlogin.connection.OAuthLoginConnection.request(OAuthLoginConnection.java:52) 
    at com.nhn.android.naverlogin.connection.OAuthLoginConnection.requestAccessToken(OAuthLoginConnection.java:34) 
    at com.nhn.android.naverlogin.ui.OAuthLoginActivity$GetAccessTokenTask.doInBackground(OAuthLoginActivity.java:310) 
    at com.nhn.android.naverlogin.ui.OAuthLoginActivity$GetAccessTokenTask.doInBackground(OAuthLoginActivity.java:1) 
    at android.os.AsyncTask$2.call(AsyncTask.java:333) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:764) 

  • 짐작되는 원인:
    cordova-plugin-naver 와 현재 안드로이드 버전의 호환성 문제일 가능성도 있을 것 같습니다.

라이선스 표시

안녕하세요?
사용하기 편리한 라이브러리를 공개해 주셔서 감사합니다. 그런데 제 앱에 사용하려니 라이선스 (licence) 관련 조항이 없네요. 명시해 주시면 제 앱의 오픈소스 크레디트에 표시하려고 합니다.

no value for name 에러

로그인 성공후, requestMe()를 바로 불러서 개인정보를 가져오려고하는데...거기서 catch로 넘어가면서
no value for name이라는 에러가 뜹니다. alert부분에서...

doLogin() {
this.naver.login()
.then(response => {
alert(response.accessToken);
this.naver.requestMe()
.then(response => {
alert(response)
alert(JSON.stringify(response));
}) // 성공
.catch(error => {alert("sss"+error)}); // 실패

  })
  .catch(error => console.error(error));

}

ionic cordova build android 진행시 문의

plugin 설치시 오류가 나서 문의 드립니다.

3rdparty_login_library_android_4.1.4.jar가 존재하는 것은 확인했는데
android 프로젝트에서 인식을 못하는 것 같습니다.
cordova와 ionic plugin을 추가하면, 추가된 libs가 인식되나요?
어떻게 하면 인식할 수 있게 할 수 있나요?

no value for name 에러

안녕하세요.
ionic-plugin-naver getting-start 도중 아직까지 원인모를 no value for name 에러 때문에 진도가 안나가져서요..

        this.naver.login().then(res => {
            
            alert("로그인 - " + JSON.stringify(res));
                
            this.naver.requestMe().then(res => {
                alert("로그인 정보 - " + JSON.stringify(res));
            }).catch(err => {alert(err);});
        }).catch(err => {alert(err);});

이렇게 돌려본 결과
login 의 callback인
alert("로그인 - " + JSON.stringify(res));
만 돌고 그 다음인 requestMe의 결과는 애러인 catch로 돌아오고 그걸 alert로 확인해본 결과
no value for name 만... 나옵니다..
이유를 몰라서 해결도 안나오네요.. ㅠ

밑 이슈의 방법대로 따라해도 같은결과입니다.
에초에 requestMe 메소드에서 catch문으로 나가져서 아무 반응이 없어요..

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.