带你玩转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应用,有兴趣的同学可以查阅官方文档去查看更多自己需要的功能

相关推荐
阿巴斯甜8 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker9 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952710 小时前
Andorid Google 登录接入文档
android
黄林晴11 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android