sdk 버전: 1.3.1, 1.4.0 버전에서 모두 이슈가 발생합니다.
ios, android 모두를 대응하고 있습니다.
pubspec의 의존성은 다음과 같습니다:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl_phone_number_input: ^0.7.0+2
shimmer: ^2.0.0
carousel_slider: ^4.0.0
webview_flutter: ^3.0.4
flutter_web_auth: ^0.5.0
firebase_crashlytics: ^3.0.15
flutter_markdown: ^0.6.14
get: ^4.6.1
url_launcher: ^6.1.9
package_info_plus: "^3.0.3"
adaptive_action_sheet: ^2.0.0
custom_rounded_rectangle_border: ^0.2.0-nullsafety.0
flutter_svg: ^2.0.2
amplitude_flutter: ^3.8.1
sentry_flutter: ^6.20.1
cupertino_icons: ^1.0.4
version: ^3.0.2
photo_view: ^0.14.0
flutter_share: ^2.0.0
firebase_core: ^2.7.0
device_info_plus: ^8.1.0
firebase_analytics: ^10.1.4
sign_in_with_apple: ^4.3.0
firebase_auth: ^4.2.9
graphql_flutter: ^5.1.2
iamport_flutter: ^0.10.0
#kakao_flutter_sdk: ^1.3.1
flutter_secure_storage: ^8.0.0
flutter_dotenv: ^5.0.0
firebase_dynamic_links: ^5.0.15
firebase_remote_config: ^3.0.13
firebase_messaging: ^14.2.5
shared_preferences: ^2.0.12
loadmore: ^2.0.1
validators: ^3.0.0
image_picker: ^0.8.6+2
daum_postcode_search: ^0.0.1
appdelegate.swift는 다음과 같습니다:
import Flutter
import UIKit
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
main.dart는 다음과 같습니다:
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
await dotenv.load(fileName: '.env');
KakaoSdk.init(
nativeAppKey: dotenv.env['KAKAO_NATIVE_KEY'],
javaScriptAppKey: dotenv.env['KAKAO_JAVASCRIPT_KEY'],
);
//...
// Pass all uncaught errors from the framework to Crashlytics.
FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
await SentryFlutter.init(
(options) {
options.dsn =
'DSN;
},
appRunner: () => runApp(App(
firstScreen:
(!(result is int) || (result is bool && (result as bool) == false))
? LoginScreen()
: Tabs())),
);
}
이와 같이 코드를 작성할 때, kakao sdk를 의존성에 명기하지 않았을 경우에는 firebase dynamic link의 .getInitialLink
를 통한 링크 수신이 정상적으로 이뤄지지만, 의존성에 flutter kakao sdk를 명기할 경우에는 이뤄지지 않습니다.
또한 uni_links 패키지를 사용해 url 을 가져오려 시도했을 떄에도 항상 null이 출력되는 것으로 보아, firebase_dynamic_link 패키지만의 문제는 아닌 것으로 판단하고 있습니다.
지금은 사용할 수 없는 https://github.com/JosephNK/flutter_kakao_login 패키지에서는, flutter_kakao_login/SwiftFlutterKakaoLoginPlugin.swift at master · JosephNK/flutter_kakao_login (github.com) 를 참조하였을 때 다음과 같이 application 함수를 overriding 하지 않았습니다:
// override public func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
// if (AuthApi.isKakaoTalkLoginUrl(url)) {
// return AuthController.handleOpenUrl(url: url)
// }
// return false
// }
떄문에 packages/kakao_flutter_sdk_common/ios/Classes/SwiftKakaoFlutterSdkPlugin.swift
의 public func application(_ application: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
함수가 혹시 문제가 있을까 추정해보는 중입니다! 혹시 다른 url interceptor들에 영향을 미치는 부분이 있는지 확인 부탁드립니다!