JosephNK / flutter_kakao_login

A Flutter plugin for using the native Kakao Login SDKs on Android and iOS.
BSD 2-Clause "Simplified" License
36 stars 15 forks source link

Flutter Kakao Login PlugIn

pub

Deprecation Notice

This plugin will no longer be updated as the full version of the Kakao SDK for Flutter is released. No further updates to this plugin are planned and we recommend that all users migrate to the https://pub.dev/packages/kakao_flutter_sdk version.


A Flutter plugin for using the native Kakao Login SDKs on Android and iOS.

The source is designed in the Kakao API V2 version. (start updated 2021.02.20)

KakaoSDK Version using in plugin

Required

Installation

See the installation by pub.

Android

See the setup instructions detail.

Setup :: tools version

Set to tools 3.6.1 or higher

dependencies {
    ...
    classpath 'com.android.tools.build:gradle:3.6.1'
}

Setup :: gradle version

Set to gradle 5.6.4 or higher

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

Setup :: proguard-kakao.pro

First, create proguard-kakao.pro file.

# kakao login
-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter

Second, You need to apply ProGuard to your project.

buildTypes {
    release {
        ...
        proguardFiles 'proguard-kakao.pro'
    }
}

Setup :: AndroidManifest.xml

<!-- 1. Setup Require -->
<uses-permission android:name="android.permission.INTERNET" />

<application>
    <activity
        ...
        android:name=".SampleLoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- 2. Setup Kakao -->
    <activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <!-- Redirect URI: "kakao{NATIVE_APP_KEY}://oauth“ -->
            <data android:host="oauth"
                android:scheme="kakao0123456789abcdefghijklmn" />
        </intent-filter>
    </activity>
    ...
</application>

iOS

See the setup instructions detail.

Setup :: AppDelegate.swift

See the example/ios/Runner/AppDelegate.swift

Setup :: Info.plist

<key>KAKAO_APP_KEY</key>
<string>0123456789abcdefghijklmn</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>kakao0123456789abcdefghijklmn</string>
    <string>kakaokompassauth</string>
    <string>storykompassauth</string>
    <string>kakaolink</string>
    <string>storylink</string>
</array>
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string></string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>kakao0123456789abcdefghijklmn</string>
        </array>
    </dict>
</array>

Example

See example/lib/main.dart for details.

await kakaoSignIn.init("0123456789abcdefghijklmn");
try {
    final FlutterKakaoLogin kakaoSignIn = new FlutterKakaoLogin();
    final result = await kakaoSignIn.logIn();
    // To-do Someting ...
} on PlatformException catch (e) {
    print("${e.code} ${e.message}");
}
try {
    final FlutterKakaoLogin kakaoSignIn = new FlutterKakaoLogin();
    final result = await kakaoSignIn.logOut();
    // To-do Someting ...
} on PlatformException catch (e) {
    print("${e.code} ${e.message}");
}
try {
    final FlutterKakaoLogin kakaoSignIn = new FlutterKakaoLogin();
    final result = await kakaoSignIn.unlink();
    // To-do Someting ..
} on PlatformException catch (e) {
    print("${e.code} ${e.message}");
}
final FlutterKakaoLogin kakaoSignIn = new FlutterKakaoLogin();
final KakaoToken token = await (kakaoSignIn.currentToken);
final accessToken = token.accessToken;
if (accessToken != null) {
    // To-do Someting ...
}
final FlutterKakaoLogin kakaoSignIn = new FlutterKakaoLogin();
final KakaoToken token = await (kakaoSignIn.currentToken);
final refreshToken = token.refreshToken;
if (refreshToken != null) {
    // To-do Someting ...
}
try {
    final FlutterKakaoLogin kakaoSignIn = new FlutterKakaoLogin();
    final result = await kakaoSignIn.getUserMe();
    final KakaoAccountResult account = result.account;
    if (account != null) {
        final KakaoAccountResult account = result.account;
        final userID = account.userID;
        final userEmail = account.userEmail;
        final userPhoneNumber = account.userPhoneNumber;
        final userDisplayID = account.userDisplayID;
        final userNickname = account.userNickname;
        final userGender = account.userGender;
        final userAgeRange = account.userAgeRange;
        final userBirthday = account.userBirthday;
        final userProfileImagePath = account.userProfileImagePath;
        final userThumbnailImagePath = account.userThumbnailImagePath;
        // To-do Someting ...
    }
} on PlatformException catch (e) {
    print("${e.code} ${e.message}");
}

Contributors

Thank you for your interest in the source and for your help :)

github email
@amond amond@amond.net
@myriky riky@myriky.net
@kunkaamd