josephnk / flutter_kakao_login Goto Github PK
View Code? Open in Web Editor NEWA Flutter plugin for using the native Kakao Login SDKs on Android and iOS.
License: BSD 2-Clause "Simplified" License
A Flutter plugin for using the native Kakao Login SDKs on Android and iOS.
License: BSD 2-Clause "Simplified" License
이게 제 문제인지 모르겠는데, 카카오 연동만 시키면 로그인 하는 순간 화면이 한번 더 나타나는데 원래 그런건가요?
KakaoLoginResult result = await kakaoSignIn.logIn();
final KakaoAccountResult account = result.account;
를 하였을 때, account.userID
를 제외한 모든 값들이 null입니다..
혹시 추가적으로 설정해야 할 부분이 있을까요??
#15
ios13에서 앱설치되어있는 경우 오류가 발생합니다
샘플 pubspec.yaml에 google_sign_in: ^3.2.4 를 추가하면 앱이 죽습니다.
카카오로그인과 구글 버전 충돌이 나 빌드가 안되서, project level의 build.gradle에 아래와 같이 추가하니,
빌드 오류는 나지 않습니다.
subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "27.0.1"
}
}
}
}
아래와 같은 노트가 나타나기는 하지만, 샘플만 돌렸을때 잘 동작합니다.
Note: /.../flutter/.pub-cache/hosted/pub.dartlang.org/flutter_kakao_login-0.0.5/android/src/main/java/com/josephnk/flutterkakaologin/FlutterKakaoLoginPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
왜 앱이 죽는지 원인을 모르겠네요?
Dear JosephNK.
I have some problem.
It's my development environment.
flutter : 0.9.4
ide : Android studio
Launching lib/main.dart on k7p in debug mode...
Automatically signing iOS for device deployment using specified development team in Xcode project:
Running pod install...
CocoaPods' output:
↳
Preparing
Analyzing dependencies
Inspecting targets to integrate
Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)
Finding Podfile changes
A flutter_kakao_login
- Flutter
- flutter_facebook_login
- shared_preferences
- video_player
Fetching external sources
-> Fetching podspec for `Flutter` from `.symlinks/flutter/ios`
-> Fetching podspec for `flutter_facebook_login` from `.symlinks/plugins/flutter_facebook_login/ios`
-> Fetching podspec for `flutter_kakao_login` from `.symlinks/plugins/flutter_kakao_login/ios`
-> Fetching podspec for `shared_preferences` from `.symlinks/plugins/shared_preferences/ios`
-> Fetching podspec for `video_player` from `.symlinks/plugins/video_player/ios`
Resolving dependencies of `Podfile`
Comparing resolved specification to the sandbox manifest
A KakaoOpenSDK
A flutter_kakao_login
- Bolts
- FBSDKCoreKit
- FBSDKLoginKit
- Flutter
- flutter_facebook_login
- shared_preferences
- video_player
Downloading dependencies
-> Using Bolts (1.9.0)
-> Using FBSDKCoreKit (4.36.0)
-> Using FBSDKLoginKit (4.36.0)
-> Using Flutter (1.0.0)
-> Installing KakaoOpenSDK (1.8.2)
> Copying KakaoOpenSDK from `/Users/mbp2018/Library/Caches/CocoaPods/Pods/Release/KakaoOpenSDK/1.8.2-c09b1` to `Pods/KakaoOpenSDK`
-> Using flutter_facebook_login (0.0.1)
-> Installing flutter_kakao_login (0.0.1)
-> Using shared_preferences (0.0.1)
-> Using video_player (0.0.1)
- Running pre install hooks
[!] The 'Pods-Runner' target has transitive dependencies that include static frameworks: (KakaoOpenSDK)
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer/xcode/target_validator.rb:87:in `block (2 levels) in verify_no_static_framework_transitive_dependencies'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer/xcode/target_validator.rb:73:in `each'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer/xcode/target_validator.rb:73:in `block in verify_no_static_framework_transitive_dependencies'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer/xcode/target_validator.rb:70:in `each'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer/xcode/target_validator.rb:70:in `verify_no_static_framework_transitive_dependencies'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer/xcode/target_validator.rb:36:in `validate!'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer.rb:415:in `validate_targets'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/installer.rb:118:in `install!'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/command/install.rb:41:in `run'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/claide-1.0.2/lib/claide/command.rb:334:in `run'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/lib/cocoapods/command.rb:52:in `run'
/usr/local/Cellar/cocoapods/1.5.3/libexec/gems/cocoapods-1.5.3/bin/pod:55:in `<top (required)>'
/usr/local/Cellar/cocoapods/1.5.3/libexec/bin/pod:22:in `load'
/usr/local/Cellar/cocoapods/1.5.3/libexec/bin/pod:22:in `<main>'
Error output from CocoaPods:
↳
[!] 'KakaoOpenSDK' uses the unencrypted http protocol to transfer the Pod. Please be sure you're in a safe network with only trusted hosts in there. Please reach out to the library author to notify them of this security issue.
Finished with error: Error running pod install
please help me. ;(
iOS에서는 정상적으로 동작하는데 안드로이드에서
flutter_kakao_login: ^0.0.4
를 추가하면, 앱 설치되는 과정에서 죽습니다.
<!-- The INTERNET permission is required for development. Specifically,
flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name="io.flutter.app.FlutterApplication"
android:label="testapp"
android:icon="@mipmap/ic_launcher">
<!--<uses-permission android:name="android.permission.INTERNET"/>-->
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Kakaotal login Configuration -->
<meta-data
android:name="com.kakao.sdk.AppKey"
android:value="@string/kakao_app_key" />
<activity
android:name="com.kakao.auth.authorization.authcode.KakaoWebViewActivity"
android:launchMode="singleTop"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
[!] 'KakaoOpenSDK' uses the unencrypted 'http' protocol to transfer the Pod. Please be sure you're in a safe network with only trusted hosts.
Otherwise, please reach out to the library author to notify them of this security issue.
혹시 userme 에서 gender 정보를 받아오는 부분에 대한 업데이트 계획은 없으실까요?
소스를 받아서 kakaosdk 업데이트 후 수정하려했는데 정보를 받아오는데 어려움이 있네요 ㅠ
카카오 로그인화면 띄우고, 로그인 누르면 그상태로 멈춰있습니다.
해당코드는 작성한 개발자쪽에서는 실행되는 상황입니다.
Thanks for your awesome package.
Is there any plan in migrating to null-safety for Flutter 2.0.0?
Here's a kind guide about migrating. (dart.dev)
$ pod install Analyzing dependencies Fetching podspec for
Flutterfrom
.symlinks/flutter/iosFetching podspec for
connectivityfrom
.symlinks/plugins/connectivity/iosFetching podspec for
device_infofrom
.symlinks/plugins/device_info/iosFetching podspec for
firebase_authfrom
.symlinks/plugins/firebase_auth/iosFetching podspec for
firebase_corefrom
.symlinks/plugins/firebase_core/iosFetching podspec for
flutter_facebook_loginfrom
.symlinks/plugins/flutter_facebook_login/iosFetching podspec for
flutter_kakao_loginfrom
.symlinks/plugins/flutter_kakao_login/iosFetching podspec for
flutter_pedometerfrom
.symlinks/plugins/flutter_pedometer/iosFetching podspec for
fluttertoastfrom
.symlinks/plugins/fluttertoast/iosFetching podspec for
google_sign_infrom
.symlinks/plugins/google_sign_in/iosFetching podspec for
package_infofrom
.symlinks/plugins/package_info/iosFetching podspec for
permission_handlerfrom
.symlinks/plugins/permission_handler/iosFetching podspec for
sharefrom
.symlinks/plugins/share/iosFetching podspec for
shared_preferencesfrom
.symlinks/plugins/shared_preferences/iosFetching podspec for
video_playerfrom
.symlinks/plugins/video_player/ios`
Downloading dependencies
Using Bolts (1.9.0)
Using FBSDKCoreKit (4.40.0)
Using FBSDKLoginKit (4.39.1)
Using Firebase (5.16.0)
Using FirebaseAnalytics (5.5.0)
Using FirebaseAuth (5.3.0)
Using FirebaseAuthInterop (1.0.0)
Using FirebaseCore (5.2.0)
Using FirebaseInstanceID (3.4.0)
Using Flutter (1.0.0)
Using GTMSessionFetcher (1.2.1)
Using GoogleAppMeasurement (5.5.0)
Using GoogleSignIn (4.4.0)
Using GoogleToolboxForMac (2.2.0)
Using GoogleUtilities (5.3.7)
Installing KakaoOpenSDK (1.11.1) <------------
Using Reachability (3.2)
Using connectivity (0.0.1)
Using device_info (0.0.1)
Using firebase_auth (0.0.1)
Using firebase_core (0.0.1)
Using flutter_facebook_login (0.0.1)
Installing flutter_kakao_login (0.0.6) <-----------------
Using flutter_pedometer (0.0.1)
Using fluttertoast (0.0.2)
Using google_sign_in (0.0.1)
Using nanopb (0.3.901)
Using package_info (0.0.1)
Using permission_handler (2.1.2)
Using share (0.5.2)
Using shared_preferences (0.0.1)
Using video_player (0.0.1)
[!] The 'Pods-Runner' target has transitive dependencies that include static frameworks: (KakaoOpenSDK)
[!] 'KakaoOpenSDK' uses the unencrypted http protocol to transfer the Pod. Please be sure you're in a safenetwork with only trusted hosts in there. Please reach out to the library author to notify them of this security issue.`
이게 문제드라구요.
[!] The 'Pods-Runner' target has transitive dependencies that include static frameworks: (KakaoOpenSDK)
use_frameworks! 요걸 제거 하고도 해봤는데 이걸 해버리면 다른것들이 전부 박살나드라구요...
이리 저리 많이 찾아 보고 있는데.. 도와주세요.
Google Play 에 배포하기 전 로컬 버전에서는 카카오톡앱을 통한 인증 후에 잘 진행이 됩니다.
하지만 배포한 후에 해당 버전을 Play Store 를 통해 설치하면 카카오톡 앱을 통해 인증한 후에 반환을 받지 못하는 것인지 진행이 안됩니다.
카카오톡 앱이 없는 경우 인증을 위한 카카오톡 로그인 페이지로 넘어가는데 이런 경우에는 인증이 진행됩니다.
이 부분 혹시 챙겨서 업데이트하실 수 있을까요?
관련 버전 정보도 추가합니다.
Flutter version 1.22.2
Platform android-30, build-tools 29.0.2
Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
VS Code (version 1.50.1)
First of all thank you @JosephNK for creating this, I find it much better than the other package out there since it's much easier to use 👍
My issue is that final KakaoLoginResult result = await kakaoSignIn.getUserMe();
returns null
except for userId
.
When I debugged kakaoSignIn.getUserMe()
method, the result seems to be there.
login_page.dart
final KakaoLoginResult result = await kakaoSignIn.getUserMe();
print('userName: ${result.account.userNickname}');
flutter: userNickname: null
flutter_kakao_login.dart
// Get UserMe Method
Future<KakaoLoginResult> getUserMe() async {
final Map<dynamic, dynamic> result =
await _channel.invokeMethod('getUserMe');
print('debug: ${result.toString()}');
return _delayedToResult(
new KakaoLoginResult._(result.cast<String, dynamic>()));
}
flutter: debug: {status: loggedIn, userID: xxxxxxxxxx, userNickname: xxxxxxxx}
Not sure why it won't return the value.
가이드대로 모든 절차를 다 했는데도
logIn() 함수 호출 시 아래와 같은 에러가 발생합니다.
2020-01-14 15:07:11.964 814-938/com.hyperitycorp.app.inside E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Session is not initialized. Call KakaoSDK#init first., null)
테스트 단말은 안드로이드구요
빠진 설정이 있을까요?
PlatformException(LOGIN_ERR, 로그인 실패, invalid android_key_hash or ios_bundle_id or web_site_url, null)
i got issue with https://pub.dev/packages/multi_image_picker and flutter_kakao_login.
the function onActivityResult in multi_image_picker override so that function in flutter_kakao_login not working and that make crash app in android.
error in line => https://github.com/Sh1d0w/multi_image_picker/blob/master/android/src/main/java/com/vitanov/multiimagepicker/MultiImagePickerPlugin.java#L575
because photos value is null.
i have change that and it working for me
`public class FlutterKakaoLoginPlugin implements FlutterPlugin, ActivityAware {
private static final String CHANNEL_NAME = "flutter_kakao_login";
private static final String LOG_TAG = "KakaoTalkPlugin";
private static Registrar registrar;
private Activity activity;
private MethodChannel channel;
private FlutterKakaoLoginHandler handler;
/**
final FlutterKakaoLoginPlugin instance = new FlutterKakaoLoginPlugin();
instance.onAttachedToEngine(registrar.messenger());
instance.onAttachedToActivity(activity);
}
@OverRide
public void onAttachedToEngine(FlutterPluginBinding flutterPluginBinding) {
onAttachedToEngine(flutterPluginBinding.getBinaryMessenger());
}
private void onAttachedToEngine(BinaryMessenger messenger) {
channel = new MethodChannel(messenger, CHANNEL_NAME);
}
@OverRide
public void onDetachedFromEngine(FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
channel = null;
handler = null;
}
@OverRide
public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) {
onAttachedToActivity(activityPluginBinding.getActivity());
if(handler != null) {
activityPluginBinding.addActivityResultListener(handler);
}
}
private void onAttachedToActivity(Activity _activity) {
activity = _activity;
if (activity != null && channel != null) {
handler = new FlutterKakaoLoginHandler(activity, channel);
FlutterKakaoLoginPlugin.registrar.addActivityResultListener(handler);
channel.setMethodCallHandler(handler);
}
}
@OverRide
public void onDetachedFromActivityForConfigChanges() {
onDetachedFromActivity();
}
@OverRide
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) {
onAttachedToActivity(activityPluginBinding.getActivity());
// after a configuration change.
}
@OverRide
public void onDetachedFromActivity() {
channel.setMethodCallHandler(null);
activity = null;
handler = null;
}
}`
example 소스 이용해서 릴리즈모드 빌드시 로그인 안됩니다.
이 현상은 keystore 사인 했을때만 발생됩니다.
실행하면 아래와 같이 플러그인을 로드하지 못하는 것 처럼 보이는 오류를 내고 앱이 죽습니다.
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'io.flutter.plugin.common.PluginRegistry$Registrar io.flutter.plugin.common.PluginRegistry$Registrar.addActivityResultListener(io.flutter.plugin.common.PluginRegistry$ActivityResultListener)' on a null object reference
at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin.onAttachedToActivity(FlutterKakaoLoginPlugin.java:104)
at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin.onAttachedToActivity(FlutterKakaoLoginPlugin.java:94)
at io.flutter.embedding.engine.FlutterEnginePluginRegistry.add(FlutterEnginePluginRegistry.java:143)
at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:19)
at com.benife.amfit.MainActivity.configureFlutterEngine(MainActivity.kt:12)
flutter clean, flutter pub get, 재부팅, flutter 재설치 등 시도해 보았습니다. ㅠㅠ
도움부탁드립니다.
[√] Flutter (Channel stable, v1.17.1, on Microsoft Windows [Version 10.0.18363.778], locale ko-KR)
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[√] Android Studio (version 3.5)
[√] Connected device (1 available)
android 29 기기 에뮬에서 확인했었고 아래 사진에서 동의하고 계속하기
버튼을 눌러도 아무런 동작이 없습니다.
pub 에 언급되어 있는 설정 모두 완료했고, hashKey 도 카카오 디벨로퍼 사이트에 등록했습니다.
혹시 웹뷰 관련 설정해야할 내용이 필요할까요?
안녕하세요. 유용한 패키지 만들어주셔서 잘 쓰고 있습니다. 카카오 로그인을 시도하는데, ios, android dev, android profile 모드에서는 로그인이 되지만 android release 로 apk 파일을 빌드해서 설치한 뒤 adb log를 찍어보면, 카카오 로그인 시도 후에 카카오 웹 페이지 열린 뒤에 다음과 같은 에러가 나옵니다.
flutter : LOGIN_ERR 로그인 실패
빌드를 하기 위해 사용하는 명령어는 다음과 같습니다.
flutter build apk --release --flavor production --dart-define=ENV=prd
flutter doctor 결과는 다음과 같습니다.
[✓] Flutter (Channel stable, 2.5.1, on macOS 11.6 20G165 darwin-x64, locale ko-KR)
• Flutter version 2.5.1 at /Users/parkinpum/dev/mobile/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision ffb2ecea52 (13 days ago), 2021-09-17 15:26:33 -0400
• Engine revision b3af521a05
• Dart version 2.14.2
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
• Android SDK at /Users/parkinpum/Library/Android/sdk
• Platform android-30, build-tools 30.0.3
• ANDROID_HOME = /Users/parkinpum/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 13.0, Build version 13A233
• CocoaPods version 1.10.1
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2020.3)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7281165)
[✓] VS Code (version 1.60.2)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.26.0
[✓] Connected device (2 available)
• SM G955N (mobile) • ce0417145cfa18a70c • android-arm64 • Android 9 (API 28)
• Chrome (web) • chrome • web-javascript • Google Chrome 94.0.4606.61
• No issues found!
build.gradle 은 다음과 같습니다.
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
# 이 부분을 proguardFiles 'proguard-kakao.pro' 로도 해 보았으나 동일한 문제가 발생합니다.
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-kakao.pro'
}
}
해결책이 있을지 문의드립니다. 감사합니다.
in English: My flutter app with your package works well in iOS, Android debug and Android profile environment but not working in Android release mode and got one a line of error message.
In debug mode, it works but when i login with release mode and it crashes. This is log:
FATAL EXCEPTION: main
Process: com..., PID: 24644
ClientError(reason=TokenNotFound, msg=Client-side error)
at com.kakao.sdk.auth.k.c$a.a(Unknown Source:138)
at com.kakao.sdk.auth.k.c$a.b(Unknown Source:5)
at com.kakao.sdk.auth.b$d.a(Unknown Source:33)
at n.g$b$a$a.run(Unknown Source:37)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:226)
at android.app.ActivityThread.main(ActivityThread.java:7592)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
ios 에서 로그인 창에서 키보드가 올라올 때 에러가 발생합니다.
iphone 8 에서는 에러가 발생해도 로그인 버튼을 클릭하면 정상 작동하는데,
iPhone 11 pro max 에서는 같은 에러가 발생하고 로그인 버튼을 눌렀을 떄 먹통이 되버리네요.
왜그럴까요?
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x600001e2e580 h=--& v=--& _UIToolbarContentView:0x7fd5a37128e0.width == 0 (active)>",
"<NSLayoutConstraint:0x600001e36bc0 H:|-(0)-[_UIButtonBarStackView:0x7fd5a375cd30] (active, names: '|':_UIToolbarContentView:0x7fd5a37128e0 )>",
"<NSLayoutConstraint:0x600001e36c10 _UIButtonBarStackView:0x7fd5a375cd30.trailing == _UIToolbarContentView:0x7fd5a37128e0.trailing (active)>",
"<NSLayoutConstraint:0x600001e27020 'IB_Leading_Leading' H:|-(0)-[_UIModernBarButton:0x7fd5a365b4d0] (active, names: '|':_UIButtonBarButton:0x7fd5a365b0f0 )>",
"<NSLayoutConstraint:0x600001e2c730 'IB_Leading_Leading' H:|-(>=5)-[_UIModernBarButton:0x7fd5a6041470] (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>",
"<NSLayoutConstraint:0x600001e27070 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a365b4d0]-(>=8)-| (active, names: '|':_UIButtonBarButton:0x7fd5a365b0f0 )>",
"<NSLayoutConstraint:0x600001e2c780 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6041470]-(>=5)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>",
"<NSLayoutConstraint:0x600001e2d4f0 'TB_Leading_Leading' H:|-(8)-[_UIModernBarButton:0x7fd5a6042c70'Done'] (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d540 'TB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6042c70'Done']-(0)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d900 'UISV-canvas-connection' UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.leading == _UIButtonBarButton:0x7fd5a365b0f0.leading (active)>",
"<NSLayoutConstraint:0x600001e2db80 'UISV-canvas-connection' UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.trailing == _UIButtonBarButton:0x7fd5a60428b0.trailing (active)>",
"<NSLayoutConstraint:0x600001e2dbd0 'UISV-spacing' H:[_UIButtonBarButton:0x7fd5a365b0f0]-(0)-[UIView:0x7fd5a60410e0] (active)>",
"<NSLayoutConstraint:0x600001e2dc20 'UISV-spacing' H:[UIView:0x7fd5a60410e0]-(0)-[_UIButtonBarButton:0x7fd5a60412a0] (active)>",
"<NSLayoutConstraint:0x600001e2dc70 'UISV-spacing' H:[_UIButtonBarButton:0x7fd5a60412a0]-(0)-[UIView:0x7fd5a6042750] (active)>",
"<NSLayoutConstraint:0x600001e2dcc0 'UISV-spacing' H:[UIView:0x7fd5a6042750]-(0)-[_UIButtonBarButton:0x7fd5a60428b0] (active)>",
"<NSLayoutConstraint:0x600001e36a30 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>",
"<NSLayoutConstraint:0x600001e36ad0 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide']-(0)-|(LTR) (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001e27070 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a365b4d0]-(>=8)-| (active, names: '|':_UIButtonBarButton:0x7fd5a365b0f0 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x600001e2e580 h=--& v=--& _UIToolbarContentView:0x7fd5a37128e0.width == 0 (active)>",
"<NSLayoutConstraint:0x600001e36bc0 H:|-(0)-[_UIButtonBarStackView:0x7fd5a375cd30] (active, names: '|':_UIToolbarContentView:0x7fd5a37128e0 )>",
"<NSLayoutConstraint:0x600001e36c10 _UIButtonBarStackView:0x7fd5a375cd30.trailing == _UIToolbarContentView:0x7fd5a37128e0.trailing (active)>",
"<NSLayoutConstraint:0x600001e2c730 'IB_Leading_Leading' H:|-(>=5)-[_UIModernBarButton:0x7fd5a6041470] (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>",
"<NSLayoutConstraint:0x600001e2c780 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6041470]-(>=5)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>",
"<NSLayoutConstraint:0x600001e2d4f0 'TB_Leading_Leading' H:|-(8)-[_UIModernBarButton:0x7fd5a6042c70'Done'] (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d540 'TB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6042c70'Done']-(0)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d900 'UISV-canvas-connection' UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.leading == _UIButtonBarButton:0x7fd5a365b0f0.leading (active)>",
"<NSLayoutConstraint:0x600001e2db80 'UISV-canvas-connection' UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.trailing == _UIButtonBarButton:0x7fd5a60428b0.trailing (active)>",
"<NSLayoutConstraint:0x600001e2dbd0 'UISV-spacing' H:[_UIButtonBarButton:0x7fd5a365b0f0]-(0)-[UIView:0x7fd5a60410e0] (active)>",
"<NSLayoutConstraint:0x600001e2dc20 'UISV-spacing' H:[UIView:0x7fd5a60410e0]-(0)-[_UIButtonBarButton:0x7fd5a60412a0] (active)>",
"<NSLayoutConstraint:0x600001e2dc70 'UISV-spacing' H:[_UIButtonBarButton:0x7fd5a60412a0]-(0)-[UIView:0x7fd5a6042750] (active)>",
"<NSLayoutConstraint:0x600001e2dcc0 'UISV-spacing' H:[UIView:0x7fd5a6042750]-(0)-[_UIButtonBarButton:0x7fd5a60428b0] (active)>",
"<NSLayoutConstraint:0x600001e36a30 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>",
"<NSLayoutConstraint:0x600001e36ad0 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide']-(0)-|(LTR) (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001e2c780 'IB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6041470]-(>=5)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x600001e2e580 h=--& v=--& _UIToolbarContentView:0x7fd5a37128e0.width == 0 (active)>",
"<NSLayoutConstraint:0x600001e36bc0 H:|-(0)-[_UIButtonBarStackView:0x7fd5a375cd30] (active, names: '|':_UIToolbarContentView:0x7fd5a37128e0 )>",
"<NSLayoutConstraint:0x600001e36c10 _UIButtonBarStackView:0x7fd5a375cd30.trailing == _UIToolbarContentView:0x7fd5a37128e0.trailing (active)>",
"<NSLayoutConstraint:0x600001e2d4f0 'TB_Leading_Leading' H:|-(8)-[_UIModernBarButton:0x7fd5a6042c70'Done'] (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d540 'TB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6042c70'Done']-(0)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d900 'UISV-canvas-connection' UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.leading == _UIButtonBarButton:0x7fd5a365b0f0.leading (active)>",
"<NSLayoutConstraint:0x600001e2db80 'UISV-canvas-connection' UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.trailing == _UIButtonBarButton:0x7fd5a60428b0.trailing (active)>",
"<NSLayoutConstraint:0x600001e2dbd0 'UISV-spacing' H:[_UIButtonBarButton:0x7fd5a365b0f0]-(0)-[UIView:0x7fd5a60410e0] (active)>",
"<NSLayoutConstraint:0x600001e2dc20 'UISV-spacing' H:[UIView:0x7fd5a60410e0]-(0)-[_UIButtonBarButton:0x7fd5a60412a0] (active)>",
"<NSLayoutConstraint:0x600001e2dc70 'UISV-spacing' H:[_UIButtonBarButton:0x7fd5a60412a0]-(0)-[UIView:0x7fd5a6042750] (active)>",
"<NSLayoutConstraint:0x600001e2dcc0 'UISV-spacing' H:[UIView:0x7fd5a6042750]-(0)-[_UIButtonBarButton:0x7fd5a60428b0] (active)>",
"<NSLayoutConstraint:0x600001e36a30 'UIView-leftMargin-guide-constraint' H:|-(0)-[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>",
"<NSLayoutConstraint:0x600001e36ad0 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide']-(0)-|(LTR) (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001e2d540 'TB_Trailing_Trailing' H:[_UIModernBarButton:0x7fd5a6042c70'Done']-(0)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x600001e2e620 h=--& v=--& _UIToolbarContentView:0x7fd5a37128e0.height == 0 (active)>",
"<NSLayoutConstraint:0x600001e36c60 V:|-(0)-[_UIButtonBarStackView:0x7fd5a375cd30] (active, names: '|':_UIToolbarContentView:0x7fd5a37128e0 )>",
"<NSLayoutConstraint:0x600001e36cb0 _UIButtonBarStackView:0x7fd5a375cd30.bottom == _UIToolbarContentView:0x7fd5a37128e0.bottom (active)>",
"<NSLayoutConstraint:0x600001e2f750 UIImageView:0x7fd5a6040f20.centerY == _UIModernBarButton:0x7fd5a365b4d0.centerY (active)>",
"<NSLayoutConstraint:0x600001e272f0 'IB_Baseline_Baseline' _UIModernBarButton:0x7fd5a365b4d0.lastBaseline == UILayoutGuide:0x6000004f8700'UIViewLayoutMarginsGuide'.bottom (active)>",
"<NSLayoutConstraint:0x600001e27340 'IB_Top_Top' V:|-(>=0)-[_UIModernBarButton:0x7fd5a365b4d0] (active, names: '|':_UIButtonBarButton:0x7fd5a365b0f0 )>",
"<NSLayoutConstraint:0x600001e2c550 'UIButtonBar.maximumAlignmentSize' _UIButtonBarButton:0x7fd5a365b0f0.height == UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.height (active)>",
"<NSLayoutConstraint:0x600001e36a80 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide']-(0)-| (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>",
"<NSLayoutConstraint:0x600001e27250 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x6000004f8700'UIViewLayoutMarginsGuide']-(16)-| (active, names: '|':_UIButtonBarButton:0x7fd5a365b0f0 )>",
"<NSLayoutConstraint:0x600001e369e0 'UIView-topMargin-guide-constraint' V:|-(0)-[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'] (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001e2f750 UIImageView:0x7fd5a6040f20.centerY == _UIModernBarButton:0x7fd5a365b4d0.centerY (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x600001e2e620 h=--& v=--& _UIToolbarContentView:0x7fd5a37128e0.height == 0 (active)>",
"<NSLayoutConstraint:0x600001e36c60 V:|-(0)-[_UIButtonBarStackView:0x7fd5a375cd30] (active, names: '|':_UIToolbarContentView:0x7fd5a37128e0 )>",
"<NSLayoutConstraint:0x600001e36cb0 _UIButtonBarStackView:0x7fd5a375cd30.bottom == _UIToolbarContentView:0x7fd5a37128e0.bottom (active)>",
"<NSLayoutConstraint:0x600001e2fed0 UIImageView:0x7fd5a6042460.centerY == _UIModernBarButton:0x7fd5a6041470.centerY (active)>",
"<NSLayoutConstraint:0x600001e2ca00 'IB_Baseline_Baseline' _UIModernBarButton:0x7fd5a6041470.lastBaseline == UILayoutGuide:0x600000479ea0'UIViewLayoutMarginsGuide'.bottom (active)>",
"<NSLayoutConstraint:0x600001e2ca50 'IB_Top_Top' V:|-(>=0)-[_UIModernBarButton:0x7fd5a6041470] (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>",
"<NSLayoutConstraint:0x600001e2cff0 'UIButtonBar.maximumAlignmentSize' _UIButtonBarButton:0x7fd5a60412a0.height == UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.height (active)>",
"<NSLayoutConstraint:0x600001e36a80 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide']-(0)-| (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>",
"<NSLayoutConstraint:0x600001e2c960 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600000479ea0'UIViewLayoutMarginsGuide']-(16)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60412a0 )>",
"<NSLayoutConstraint:0x600001e369e0 'UIView-topMargin-guide-constraint' V:|-(0)-[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'] (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001e2fed0 UIImageView:0x7fd5a6042460.centerY == _UIModernBarButton:0x7fd5a6041470.centerY (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSAutoresizingMaskLayoutConstraint:0x600001e2e620 h=--& v=--& _UIToolbarContentView:0x7fd5a37128e0.height == 0 (active)>",
"<NSLayoutConstraint:0x600001e36c60 V:|-(0)-[_UIButtonBarStackView:0x7fd5a375cd30] (active, names: '|':_UIToolbarContentView:0x7fd5a37128e0 )>",
"<NSLayoutConstraint:0x600001e36cb0 _UIButtonBarStackView:0x7fd5a375cd30.bottom == _UIToolbarContentView:0x7fd5a37128e0.bottom (active)>",
"<NSLayoutConstraint:0x600001e21130 UIButtonLabel:0x7fd5a60448e0'Done'.centerY == _UIModernBarButton:0x7fd5a6042c70'Done'.centerY + 0.5 (active)>",
"<NSLayoutConstraint:0x600001e2d6d0 'TB_Baseline_Baseline' _UIModernBarButton:0x7fd5a6042c70'Done'.lastBaseline == UILayoutGuide:0x60000047a140'UIViewLayoutMarginsGuide'.bottom (active)>",
"<NSLayoutConstraint:0x600001e2d720 'TB_Top_Top' V:|-(>=0)-[_UIModernBarButton:0x7fd5a6042c70'Done'] (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e2d860 'UIButtonBar.maximumAlignmentSize' _UIButtonBarButton:0x7fd5a60428b0.height == UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'.height (active)>",
"<NSLayoutConstraint:0x600001e36a80 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide']-(0)-| (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>",
"<NSLayoutConstraint:0x600001e2d630 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x60000047a140'UIViewLayoutMarginsGuide']-(16)-| (active, names: '|':_UIButtonBarButton:0x7fd5a60428b0 )>",
"<NSLayoutConstraint:0x600001e369e0 'UIView-topMargin-guide-constraint' V:|-(0)-[UILayoutGuide:0x600000472220'UIViewLayoutMarginsGuide'] (active, names: '|':_UIButtonBarStackView:0x7fd5a375cd30 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001e21130 UIButtonLabel:0x7fd5a60448e0'Done'.centerY == _UIModernBarButton:0x7fd5a6042c70'Done'.centerY + 0.5 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.
이메일 사용 설정을 안했을때 다음과 같이 에러가 여전히 발생 합니다.
java final String userEmail = (resultKakao.getKakaoAccount().getEmail() == null) ? "" : resultKakao.getKakaoAccount().getEmail();
getKakaoAccount() 가 null 이라 에러가 발생합니다.
이해를 돕기 위해 로그켓 내용도 같이 첨부합니다.
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.kakao.usermgmt.response.model.UserAccount.getEmail()' on a null object reference
at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin$SessionCallback$1.onSuccess(FlutterKakaoLoginPlugin.java:240)
at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin$SessionCallback$1.onSuccess(FlutterKakaoLoginPlugin.java:220)
at com.kakao.network.callback.ResponseCallback.onSuccessForUiThread(ResponseCallback.java:76)
at com.kakao.network.tasks.KakaoResultTask$1$1.run(KakaoResultTask.java:78)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:209)
at android.app.ActivityThread.main(ActivityThread.java:7021)
E/AndroidRuntime(18898): at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:486)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:872)
Originally posted by @GwonHyeok in #7 (comment)
안드로이드쪽에서 발생하는 문제입니다.
final KakaoLoginResult result = await _kakaoSignIn.logIn();
카카오톡이 설치되어있고 로그인되어 있으면 이 코드가 제대로 실행되지만
아니라면
AUTHORIZATION_FAILED: Failed to get Authorization Code.
이 에러가 발생합니다.
Android studio의 Logcat에서는 아래의 오류가 발생합니다.
2020-02-07 16:35:19.106 22340-22340/? E/kakao init error: error
com.kakao.auth.KakaoSDK$AlreadyInitializedException
at com.kakao.auth.KakaoSDK.init(KakaoSDK.java:44)
at com.josephnk.flutterkakaologin.FlutterKakaoLoginHandler.(FlutterKakaoLoginHandler.java:65)
at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin.onAttachedToActivity(FlutterKakaoLoginPlugin.java:101)
at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin.onAttachedToActivity(FlutterKakaoLoginPlugin.java:91)
at io.flutter.embedding.engine.FlutterEnginePluginRegistry.add(FlutterEnginePluginRegistry.java:135)
at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:21)
at com.harftware.parasite.MainActivity.configureFlutterEngine(MainActivity.kt:21)
at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:185)
at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:418)
at android.app.Activity.performCreate(Activity.java:7183)
... 생략
flutter_kakao_login 0.7.0버전입니다(0.6.0도 마찬가지입니다).
아래는 저의 개발환경입니다.
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.12.13+hotfix.7, on Mac OS X 10.15.2 19C57, locale ko-KR)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.3)
[✓] Android Studio (version 3.5)
[✓] VS Code (version 1.42.0)
[✓] Connected device (1 available)
늘 좋은기능 제공에 감사하고있습니다.
예제 올라온데로 돌렸는데 로그인 및 다른 기능은 문제가 없는데 unlink만 에러가 뜨네요.
java.lang.IllegalStateException: Reply already submitted 이렇게 나오는데 무슨 문제일까요?
After retrieving access token via final KakaoAccessToken accessToken = await (kakaoSignIn.currentAccessToken); ...
I check it at https://kapi.kakao.com/v2/user/me
and the response is "this access token does not exist"
What can be the reason?
hi
Thank you for your effort.
I recently tried to build it for use with the google map plugin but it failed.
Help me.
[pubspec.yaml]
dev_dependencies:
flutter_test:
sdk: flutter
google_maps_flutter: ^0.5.21+8
flutter_kakao_login: ^0.5.0
=error=============================================================
You are building a fat APK that includes binaries for android-arm, android-arm64.
If you are deploying the app to the Play Store, it's recommended to use app bundles or split the APK to reduce the APK size.
To generate an app bundle, run:
flutter build appbundle --target-platform android-arm,android-arm64
Learn more on: https://developer.android.com/guide/app-bundle
To split the APKs per ABI, run:
flutter build apk --target-platform android-arm,android-arm64 --split-per-abi
Learn more on: https://developer.android.com/studio/build/configure-apk-splits#configure-abi-split
Initializing gradle... 1.1s
Resolving dependencies... 2.3s
Note: /Users/dongjinkim/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_kakao_login-0.5.0/android/src/main/java/com/josephnk/flutterkakaologin/FlutterKakaoLoginPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
R8: Type com.google.android.gms.common.internal.zzf is referenced as an interface from com.google.android.gms.internal.zzcms
.
FAILURE: Build failed with an exception.
com.android.tools.r8.CompilationFailedException: Compilation failed to complete
Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
Get more help at https://help.gradle.org
--no-shrink
flag to this command.https://songsuelah.github.io/Diones/ <문제의 사이트 주소입니다.
마이크로소프트 웨일에서는 정상적으로 출력되는 메인슬라이드배너가 구글에서는 첫접속 후 한번의 새로고침을 거쳐야 제대로 출력되고 있는 현상이 발생하고 있습니다. 쿠키 삭제 후 재접속 시에도 똑같은 현상이 발생하고 있습니다.
오류메세지를 다 처리하고 남은 에러메세지는 아래와 같습니다.
< Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'. >
구글브라우저로 첫 접속 시에는 해당 오류메세지가 없지만, 새로고침 후에는 해당 메세지가 출력됩니다.
그 외에는 기본적으로 아래의 메세지가 있는데, 연관이 있는 건지 잘 몰라서 같이 올립니다.
jquery-migrate-1.1.1.js:21 JQMIGRATE: Logging is active
첫 사이트 제작이다보니 아직 모르는 점이 많아 고민하는 와중에 다른 브라우저에서는 해당 문제가 정상 출력되는 것을 확인하고 도움을 구하고자 글을 올립니다.
같은 JQ를 쓰는 슬라이드는 동일현상이 발생하고 있지 않습니다. 배너 이미지의 크기는 2mb를 넘지 않습니다. 확장자도 제대로 웹브라우저에 맞춰 저장하였습니다.
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.kakao.usermgmt.response.model.UserAccount.getEmail()' on a null object reference
E/AndroidRuntime(17048): at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin$SessionCallback$1.onSuccess(FlutterKakaoLoginPlugin.java:240)
E/AndroidRuntime(17048): at com.josephnk.flutterkakaologin.FlutterKakaoLoginPlugin$SessionCallback$1.onSuccess(FlutterKakaoLoginPlugin.java:220)
E/AndroidRuntime(17048): at com.kakao.network.callback.ResponseCallback.onSuccessForUiThread(ResponseCallback.java:76)
E/AndroidRuntime(17048): at com.kakao.network.tasks.KakaoResultTask$1$1.run(KakaoResultTask.java:78)
E/AndroidRuntime(17048): at android.os.Handler.handleCallback(Handler.java:789)
E/AndroidRuntime(17048): at android.os.Handler.dispatchMessage(Handler.java:98)
E/AndroidRuntime(17048): at android.os.Looper.loop(Looper.java:164)
E/AndroidRuntime(17048): at android.app.ActivityThread.main(ActivityThread.java:6940)
E/AndroidRuntime(17048): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(17048): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
E/AndroidRuntime(17048): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
FirebaseAuth로 사용하려고 하는데 구글로그인과 같이 하는 방법은 없을까요?
AuthCredential을 알아야 하는데 특별한 방법이 있나요?
when we login in kakao and get KakaoAccountResult, there is only name and id , we are getting mail and proifle blank , even if we have that in our kakao account.
Please help
좋은 라이브러리 만들어 주셔서 감사합니다. 카카오 인증서 이슈에 대해 말씀드릴 내용이 있습니다.
신뢰의 고리 문제로 인해, 애플이 카카오가 사용하고 있는 시만텍 발 인증서를 루트 저장소에서 삭제할 예정입니다. 이에 따라 카카오는 자사 도메인 일부의 SSL 인증서를 변경하기로 결정했습니다. 영향을 받는 도메인은 다음과 같습니다:
카카오는 2021/10/1에 인증서를 교체할 예정입니다. 이후 지원되는 카카오 SDK 버전은 다음과 같습니다:
문제가 되는 부분이 있는지 확인 부탁드립니다. 감사합니다!
본 이슈에 대한 최대한 많은 유저의 접근성을 위해, 영어로 다시 질문을 첨부하겠습니다.
Thank you for creating a great library! I want to discuss Kakao's recent certificate issue.
Due to a chain of trust problem, Apple will delete Symantec certificate Kakao corp is currently using, so Kakao corp will substitute their domains' SSL certificate. Following domains will be effected:
kauth.kakao.com
kapi.kakao.com
dapi.kakao.com
They will change the certificate on 10/1/2021. And here's the supported Kakao SDK version after then:
iOS SDK 2.x
Android SDK 2.7.0+
Please check if there would be an issue. Thank you!
Steps to reproduce:
Log:
D/FlutterKakaoLogin(31494): onMethodCall logIn D/FlutterKakaoLogin(31494): onActivityResult D/FlutterKakaoLogin(31494): Pressed back button or disagree button during requesting auth code. I/zygote64(31494): Do partial code cache collection, code=23KB, data=29KB I/zygote64(31494): After code cache collection, code=23KB, data=29KB I/zygote64(31494): Increasing code cache capacity to 128KB D/FlutterKakaoLogin(31494): onMethodCall logIn D/FlutterKakaoLogin(31494): onActivityResult D/FlutterKakaoLogin(31494): Pressed back button or disagree button during requesting auth code. D/AndroidRuntime(31494): Shutting down VM E/AndroidRuntime(31494): FATAL EXCEPTION: main E/AndroidRuntime(31494): Process: com.josephnk.flutter_kakao_login_example, PID: 31494 **E/AndroidRuntime(31494): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=0, data=null} to activity {com.josephnk.flutter_kakao_login_example/com.josephnk.flutter_kakao_login_example.MainActivity}: java.lang.IllegalStateException: Reply already submitted** E/AndroidRuntime(31494): at android.app.ActivityThread.deliverResults(ActivityThread.java:4268) E/AndroidRuntime(31494): at android.app.ActivityThread.handleSendResult(ActivityThread.java:4312) E/AndroidRuntime(31494): at android.app.ActivityThread.-wrap19(Unknown Source:0) E/AndroidRuntime(31494): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1644) E/AndroidRuntime(31494): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(31494): at android.os.Looper.loop(Looper.java:164) E/AndroidRuntime(31494): at android.app.ActivityThread.main(ActivityThread.java:6494) E/AndroidRuntime(31494): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(31494): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) E/AndroidRuntime(31494): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) E/AndroidRuntime(31494): Caused by: java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime(31494): at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:139) E/AndroidRuntime(31494): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:236) E/AndroidRuntime(31494): at com.josephnk.flutter_kakao_login.FlutterKakaoLoginPlugin$KakaoSessionCallback.onSessionOpenFailed(FlutterKakaoLoginPlugin.kt:211) E/AndroidRuntime(31494): at com.kakao.auth.Session.internalClose(Session.java:693) E/AndroidRuntime(31494): at com.kakao.auth.Session.onAuthCodeFailure(Session.java:727) E/AndroidRuntime(31494): at com.kakao.auth.Session.access$900(Session.java:55) E/AndroidRuntime(31494): at com.kakao.auth.Session$4.onAuthCodeFailure(Session.java:637) E/AndroidRuntime(31494): at com.kakao.auth.authorization.authcode.KakaoAuthCodeManager.onAuthCodeReceived(KakaoAuthCodeManager.java:281) E/AndroidRuntime(31494): at com.kakao.auth.authorization.authcode.TalkAuthCodeService.handleActivityResult(TalkAuthCodeService.java:56) E/AndroidRuntime(31494): at com.kakao.auth.authorization.authcode.KakaoAuthCodeManager.handleActivityResult(KakaoAuthCodeManager.java:164) E/AndroidRuntime(31494): at com.kakao.auth.Session.handleActivityResult(Session.java:578) E/AndroidRuntime(31494): at com.josephnk.flutter_kakao_login.FlutterKakaoLoginPlugin.onActivityResult(FlutterKakaoLoginPlugin.kt:140) E/AndroidRuntime(31494): at io.flutter.embedding.engine.FlutterEnginePluginRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEnginePluginRegistry.java:691) E/AndroidRuntime(31494): at io.flutter.embedding.engine.FlutterEnginePluginRegistry.onActivityResult(FlutterEnginePluginRegistry.java:378) E/AndroidRuntime(31494): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:597) E/AndroidRuntime(31494): at io.flutter.embedding.android.FlutterActivity.onActivityResult(FlutterActivity.java:582) E/AndroidRuntime(31494): at android.app.Activity.dispatchActivityResult(Activity.java:7276) E/AndroidRuntime(31494): at android.app.ActivityThread.deliverResults(ActivityThread.java:4264) E/AndroidRuntime(31494): ... 9 more
flutter doctor:
`Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.6 19G73, locale en-KR)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
[✓] Android Studio (version 4.0)
[✓] VS Code (version 1.47.2)
[✓] Connected device (3 available)
• No issues found!`
Started having this issue after updating to flutter_kakao_login: ^1.0.0
iOS works as expected.
Seems like key here is
E/AndroidRuntime(31494): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=0, data=null} to activity {com.josephnk.flutter_kakao_login_example/com.josephnk.flutter_kakao_login_example.MainActivity}: java.lang.IllegalStateException: Reply already submitted
0.7.0 버전으로 업데이트하니
안드로이드에서 카카오톡 앱이 열리지 않습니다.
@JosephNK when click on continue button I am not getting any response from Kakao and I am stuck on this page, I tried different accounts but same problem
NOTE:-- If KakaoTalk app installed in my device this page wont show up and I directly login with my KakaoTalk app it's only works on android version 10 or lower wont works on android version 11
@JosephNK please let me know how to fix this problem, have a nice day.
https://devtalk.kakao.com/t/ios-14-5-2/115366
카카오톡을 설치하지 않은 기기에서 종료가 되고 있습니다.
위의 링크에서는 sdk 버전을 업데이트 하면 된다고 하네요.
혹시 업데이트 가능할까요?
The provided scheme is not valid. A scheme should not include special characters such as “:” or “/”.
Do i need to add the KakaoSDK Library to Frameworks?
It's always show this warring:
2020-02-15 15:10:49.795316+0900 Runner[46400:444180] -canOpenURL: failed for URL: "kakaob1e2350ebdbc0ea2b9a5dfcf577b1333://oauth" - error: "This app is not allowed to query for scheme kakaob1e2350ebdbc0ea2b9a5dfcf577b1333"
2020-02-15 15:10:49.795440+0900 Runner[46400:444180] URL scheme for KakaoOpenSDK is not set properly in plist.
Thank you for making this plugin
i'm using flutter_kakao_login 0.5.0
in android everything is ok
but iphone x and any ios device(installed kakao app) dont get any response after call kakaoSignIn.login() even i dont get any error
//my code
Future<List> kakaoAuth() async {
result = await kakaoSignIn.logIn();
print("login") . <--------------------- ---------------- this print never call;
switch (result.status) {
case KakaoLoginStatus.loggedIn:
try {
KakaoAccessToken accessToken = await (kakaoSignIn.currentAccessToken);
if (accessToken != null) {
return [result.account.userID, accessToken.token];
}
} catch (err) {
FlutterCrashlytics().log(err.toString(), tag: "currentAccessToken");
throw err.toString();
}
break;
case KakaoLoginStatus.loggedOut:
logger.e("loggedOut");
break;
case KakaoLoginStatus.error:
logger.e("error : ${result.errorMessage}");
FlutterCrashlytics().log(result.errorMessage, tag: "kakaoAuth");
throw result.errorMessage;
break;
}
}
좋은 package 제작 감사합니다
잘 작동하네요
로그인 후 토큰을 서버로 보내 인증이 필요한데
토큰을 가져올수있도록 구현을 해 두시고
관련 안내가 없네요
var accessToken = (await kakaoSignIn.currentAccessToken).token;
이렇게 진행하면 맞나요
flutter_kakao_login 버전 2.0.0 사용중이고 kakao 로그인 요청시 crash 발생하며 아래는 로그입니다.
첨부 로그 파일도 확인 부탁드립니다.
2021-05-09 11:14:13447 [💬][AuthController.swift 261:21] -> request:
url:https://kauth.kakao.com/oauth/authorize?client_id=6a9d527ad7be395e1ae764022fe8d78b&response_type=code&redirect_uri=kakao6a9d527ad7be395e1ae764022fe8d78b://oauth&ka=sdk/2.0.5%20sdk_type/swift%20os/ios-14.5%20lang/en-%20res/390x844%20device/iPhone%20origin/com.atop.AtopWallet%20app_ver/1.0.0
parameters: ["client_id": "6a9d527ad7be395e1ae764022fe8d78b", "response_type": "code", "redirect_uri": "kakao6a9d527ad7be395e1ae764022fe8d78b://oauth", "ka": "sdk/2.0.5 sdk_type/swift os/ios-14.5 lang/en- res/390x844 device/iPhone origin/com.atop.AtopWallet app_ver/1.0.0"]
2021-05-09 23:14:13.447439+0900 Runner[69952:365869] [AuthenticationSession] The provided scheme is not valid. A scheme should not include special characters such as ":" or "/".
2021-05-09 23:14:13.497287+0900 Runner[69952:365869] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The provided scheme is not valid. A scheme should not include special characters such as ":" or "/".'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff20422fba __exceptionPreprocess + 242
1 libobjc.A.dylib 0x00007fff20193ff5 objc_exception_throw + 48
2 AuthenticationServices 0x00007fff4aae1b15 -[ASWebAuthenticationSession initWithURL:callbackURLScheme:usingEphemeralSession:completionHandler:] + 684
3 KakaoSDKAuth 0x000000010a558680 $sSo26ASWebAuthenticationSessionC3url17callbackURLScheme17completionHandlerAB10Foundation3URLV_SSSgyAHSg_s5Error_pSgtctcfcTO + 272
4 KakaoSDKAuth 0x000000010a55770a $sSo26ASWebAuthenticationSessionC3url17callbackURLScheme17completionHandlerAB10Foundation3URLV_SSSgyAHSg_s5Error_pSgtctcfC + 74
5 KakaoSDKAuth 0x000000010a555087 $s12KakaoSDKAuth14AuthControllerC34authorizeWithAuthenticationSession8authType8agtToken6scopes16channelPublicIds12serviceTerms10completionyAA0cJ0OSg_SSSgSaySSGSgA2PyAA05OAuthL0VSg_s5Error_pSgtctF + 5143
6 KakaoSDKAuth 0x000000010a553462 $s12KakaoSDKAuth14AuthControllerC34authorizeWithAuthenticationSession8authType10completionyAA0cJ0OSg_yAA10OAuthTokenVSg_s5Error_pSgtctF + 114
7 KakaoSDKAuth 0x000000010a54a18f $s12KakaoSDKAuth7AuthApiC09loginWithA7Account8authType10completionyAA0cI0OSg_yAA10OAuthTokenVSg_s5Error_pSgtctF + 159
8 Runner 0x0000000107a222d7 $s19flutter_kakao_login28SwiftFlutterKakaoLoginPluginC5logIn33_BCF6E7FF794984D6DB86164008F15FECLL6resultyyypSgc_tF + 455
9 Runner 0x0000000107a216f9 $s19flutter_kakao_login28SwiftFlutterKakaoLoginPluginC6handle_6resultySo0E10MethodCallC_yypSgctF + 1321
10 Runner 0x0000000107a21fee $s19flutter_kakao_login28SwiftFlutterKakaoLoginPluginC6handle_6resultySo0E10MethodCallC_yypSgctFTo + 142
11 Flutter 0x0000000108abe3be __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 104
12 Flutter 0x00000001082a4b26 _ZNK7flutter21PlatformMessageRouter21HandlePlatformMessageEN3fml6RefPtrINS_15PlatformMessageEEE + 166
13 Flutter 0x00000001082a9878 _ZN7flutter15PlatformViewIOS21HandlePlatformMessageEN3fml6RefPtrINS_15PlatformMessageEEE + 38
14 Flutter 0x00000001085f609f _ZNSt3__110__function6__funcIZN7flutter5Shell29OnEngineHandlePlatformMessageEN3fml6RefPtrINS2_15PlatformMessageEEEE4$_33NS_9allocatorIS8_EEFvvEEclEv + 83
15 Flutter 0x00000001082b17b6 _ZN3fml15MessageLoopImpl10FlushTasksENS_9FlushTypeE + 160
16 Flutter 0x00000001082b6526 ZN3fml17MessageLoopDarwin11OnTimerFireEP16__CFRunLoopTimerPS0 + 26
17 CoreFoundation 0x00007fff2039178a CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION + 20
18 CoreFoundation 0x00007fff2039127c __CFRunLoopDoTimer + 924
19 CoreFoundation 0x00007fff2039081a __CFRunLoopDoTimers + 265
20 CoreFoundation 0x00007fff2038ae69 __CFRunLoopRun + 2013
21 CoreFoundation 0x00007fff2038a1a7 CFRunLoopRunSpecific + 567
22 GraphicsServices 0x00007fff2b874d85 GSEventRunModal + 139
23 UIKitCore 0x00007fff246c14df -[UIApplication _run] + 912
24 UIKitCore 0x00007fff246c639c UIApplicationMain + 101
25 Runner 0x00000001079413e8 main + 72
26 libdyld.dylib 0x00007fff2025abbd start + 1
)
libc++abi: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The provided scheme is not valid. A scheme should not include special characters such as ":" or "/".'
CoreSimulator 757.5 - Device: iPhone 12 (0A63FBF7-6EE7-42CE-96A1-AA8AAC0744E4) - Runtime: iOS 14.5 (18E182) - DeviceType: iPhone 12
terminating with uncaught exception of type NSException
(lldb) [
attachment.crashlog-3A2C2A85-CB45-4A38-A551-03EECA98F96E.txt
](url)
다른 플러그인이 PluginRegistry.ActivityResultListener 를 사용할때 Exception 발생합니다.
@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v(LOG_TAG, "onActivityResult requestCode: " + requestCode + " resultCode: " + resultCode + " data: " + data);
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)){
return false;
}
return false;
}
이렇게 작성해 놓으신 부분이 있는데 아래와 같이 변경되어야 할 것 같습니다.
@Override
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v(LOG_TAG, "onActivityResult requestCode: " + requestCode + " resultCode: " + resultCode + " data: " + data);
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)){
return true; // 이부분 변경
}
return false;
}
문서를 봐보시면 아시겠지만 onActivityResult가 handle이 되었을때 true 를 반환해야합니다.
boolean onActivityResult(int requestCode,
int resultCode,
Intent data)
Returns:
true if the result has been handled.
감사합니다.
I m getiing the above issue , while trying to run in android, so please let me know solution
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.