yoonjaepark / flutter_naver_login

A Flutter plugin for Naver Sign In.
BSD 2-Clause "Simplified" License
46 stars 69 forks source link

[iOS] 가이드 수정 요청 #59

Closed mbkim95 closed 2 years ago

mbkim95 commented 2 years ago

안녕하세요

좋은 플러그인 만들어주셔서 잘 사용하고 있습니다~

현재 iOS의 AppDelegate.m 또는 AppDelegate.swift를 아래와 같이 설정하도록 가이드되어 있는데요.

// AppDelegate.m
// Implemented when iOS 9.0 Less
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [[NaverThirdPartyLoginConnection getSharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

// Implemented when iOS 9.0 higher

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    return [[NaverThirdPartyLoginConnection getSharedInstance] application:app openURL:url options:options];
}
// AppDelegate.swift
import NaverThirdPartyLogin

override func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    return NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
}

이렇게 설정하게 되면 application 메소드가 호출될 때 무조건 해당 코드가 호출되어, 이외의 플러그인들이 정상적으로 동작할 수가 없네요ㅠㅠ 대략적인 수도코드로 작성했는데요. 아래와 같은 형태로 가이드가 수정되어야 네이버 로그인 이외의 플러그인에서 url 처리를 제대로 할 수 있을 것 같습니다. 코드 참고해서 가이드 수정 부탁드립니다

// AppDelegate.swift
import NaverThirdPartyLogin

override func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    if 네이버 로그인 관련 url {
        return NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
    }
    // 네이버 로그인 이외의 url 처리
    return super.application(app, open: url, options: options)
}
kbs0093 commented 2 years ago

안녕하세요 kakao login 모듈과 동시 사용중 위 이슈로 인한 문제를 해결하게 되어 관련 글 남깁니다.

override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

     let naverPrefix = "${Bundle Identifier}://thirdPartyLoginResult" // com.을 제외한 Bundle Identifier를 :// 앞에 입력

     if(url.description.hasPrefix(naverPrefix)) {  // 로그인 관련 함수시 작동
         return NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
     }

     else {  // 별개 url의 경우 이동
         return super.application(app, open: url, options: options)
     }
 }
syonkr commented 2 years ago
import NaverThirdPartyLogin
override func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    var applicationResult = false
    if (!applicationResult) {
       applicationResult = NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
    }
    // if you use other application url process, please add code here.

    if (!applicationResult) {
       applicationResult = super.application(app, open: url, options: options)
    }
    return applicationResult
}

@kbs0093 naver login에서 사용되었을시 result가 true로 리턴되기때문에 별개의 url prefix 체크등을 하시지 않으셔도됩니다. 관련된 가이드 수정 요청은 pull request #60 되어있어 추후 문제가 없다면 적용될 예정입니다.