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

相关推荐
JMchen1234 小时前
Android UDP编程:实现高效实时通信的全面指南
android·经验分享·网络协议·udp·kotlin
黄林晴5 小时前
Android 17 再曝猛料:通知栏和快捷设置终于分家了,这操作等了十年
android
有位神秘人5 小时前
Android获取设备中本地音频
android·音视频
JMchen1235 小时前
Android网络安全实战:从HTTPS到双向认证
android·经验分享·网络协议·安全·web安全·https·kotlin
CS创新实验室5 小时前
Pandas 3 的新功能
android·ide·pandas
ujainu5 小时前
护眼又美观:Flutter + OpenHarmony 鸿蒙记事本一键切换夜间模式(四)
android·flutter·harmonyos
三少爷的鞋6 小时前
为什么我不在 Android ViewModel 中直接处理异常?
android
草莓熊Lotso7 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
恋猫de小郭7 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
工程师老罗13 小时前
如何在Android工程中配置NDK版本
android