带你玩转kakao登录 接入教程

前言导读

各位同学大家好,有段时间没有跟大家见面了,最近因为换了新工作,所以也是遇到一些新的需求和业务,正好需要接一个韩国的第三方登录,kakao登录,刚好今天调试OK了所以能就想着跟大家分享一下,那么废话不多说,我们正式开始

官方文档

参数和依赖文档

developers.kakao.com/docs/latest...

具体接入指南

developers.kakao.com/docs/latest...

具体实现

我们看到这张图 我们只需要登录的部分,我们在依赖了我们的调用kakao登录后拿到我们的token.accessToken 然后去服务端进行校验即可

准备工作

获取散列 对没有错这个kakao登录和facebook 一样需要填我们的散列 其实就是我们的签名jks的sha1 base 64之后的产物 使用命令获取

bash 复制代码
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

或者也可以使用 代码获取

csharp 复制代码
var keyHash = Utility.getKeyHash(context)
Log.e(TAG, "keyHash init: "+keyHash)

我们可以到代码底层其实也是获取了sha1 然后base 64的

kotlin 复制代码
    @TargetApi(Build.VERSION_CODES.P)
    fun getKeyHash(context: Context): String {
        return getKeyHashDeprecated(context)
    }

    @Suppress("DEPRECATION")
    @SuppressLint("PackageManagerGetSignatures")
    fun getKeyHashDeprecated(context: Context): String {
        val packageInfo = context.packageManager
            .getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
        for (signature in packageInfo.signatures ?: emptyArray()) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            return Base64.encodeToString(md.digest(), Base64.NO_WRAP)
        }
        throw IllegalStateException()
    }

登录需要的依赖

在我们的library 或者app层的build.grale 添加依赖

arduino 复制代码
// Kakao SDK 依赖
implementation "com.kakao.sdk:v2-all:latest.release"
implementation "com.kakao.sdk:v2-user:latest.release"
implementation "com.kakao.sdk:v2-share:latest.release"
implementation "com.kakao.sdk:v2-talk:latest.release"
implementation "com.kakao.sdk:v2-friend:latest.release"
implementation "com.kakao.sdk:v2-navi:latest.release"
implementation "com.kakao.sdk:v2-cert:latest.release"

指定jdk版本

在build.gradle里面添加如下配置

ini 复制代码
compileOptions {
    sourceCompatibility JavaVersion.VERSION_11
    targetCompatibility JavaVersion.VERSION_11
    coreLibraryDesugaringEnabled = true
}

然后在我们的最外层的 build.gradle 添加kotlin的支持

bash 复制代码
ext.kotlin_version = "2.0.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

清单文件配置

kakao${YOUR_NATIVE_APP_KEY} 这里是前面kakao 拼接你申请的参数的应用的key

xml 复制代码
<activity android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
    android:exported="true">

    <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${YOUR_NATIVE_APP_KEY}://oauth" -->
        <data android:scheme="kakao${YOUR_NATIVE_APP_KEY}" android:host="oauth" />
    </intent-filter>
</activity>

具体代码实现

初始化kakao登录

kotlin 复制代码
fun init(context: Context) {
    //这里xxxxxxxxxxxxxxx 要换成真实的id
    KakaoSdk.init(context, "xxxxxxxxxxxxxxx);
    var keyHash = Utility.getKeyHash(context)
    Log.e(TAG, "keyHash init: "+keyHash)

}

需要在 Application 的onCreate 里面调用

scala 复制代码
public class GameApplication  extends Application {
    private static final String TAG = "GameApplication";

    @Override
    public void onCreate() {
        super.onCreate();
        Log.e(TAG, "onCreate: " );
        MultiDex.install(this);
        KakaoKtInit.Companion.getInstance().init(this);
     
     }
 }

kakao发起授权登录

kotlin 复制代码
fun  login(activity: Activity,dialog: Dialog){
    UserApiClient.instance.loginWithKakao(activity, uiMode= LoginUiMode.AUTO) { token, error ->
        if (error != null) {
            Log.e(TAG, "Login failed.", error)
        } else if (token != null) {
            Log.i(TAG, "Login succeeded. ${token.accessToken}")
          
        }
    }
}

调起效果图

拿到回调的 accessToken

我们拿到accessToken 然后去请求我们服务端进行登录验证即可。

kakao注销

kotlin 复制代码
/***
 * 注销登录
 *
 */
fun  loginOut(activity: Activity){
    UserApiClient.instance.logout { error ->
        if (error != null) {
            Log.e(TAG, "Logout fail. Tokens are revoked from SDK", error)
        }
        else {
            Log.i(TAG, "Logout success. Tokens are revoked from SDK")
        }
    }
}

最后总结:

整个的这个kakao登录还算比较简单的,我们要注意的几个点 第一个就是初始化的位置要对 ,第二个就是我们的散列要配置对 不然会报出签名和线上散列对不上或者未配置都会导致授权失败,整体来说比naver登录要简单很多,kakao整个功能是非常强大,也是韩国的国名及app应用,有兴趣的同学可以查阅官方文档去查看更多自己需要的功能

相关推荐
2501_946233892 小时前
Flutter与OpenHarmony应用设置页面完整开发
android·flutter
青莲8433 小时前
Java基础篇——第一部
android·前端
城东米粉儿4 小时前
Android 插件 笔记
android
Jet_584 小时前
一次完整的 Unity Mono 安卓游戏逆向:Frida Hook 绕过碰撞死亡判定
android·游戏·unity
iReachers4 小时前
为什么HTML打包安卓APP安装时会覆盖或者报错?
android·java·html·html打包apk·网页打包
纟 冬4 小时前
Flutter & OpenHarmony 运动App运动模式选择组件开发
android·java·flutter
冷雨夜中漫步4 小时前
OpenAPITools使用——FAQ
android·java·缓存
ljt27249606616 小时前
Compose笔记(六十五)--插槽模式
android·笔记·android jetpack
6666v66 小时前
Android Kotlin(3) Flow异步流
android·kotlin