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

相关推荐
robotx1 小时前
安卓线程相关
android
消失的旧时光-19431 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon2 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon2 小时前
VSYNC 信号完整流程2
android
dalancon2 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户69371750013843 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android4 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才4 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶5 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle
汪海游龙5 小时前
开源项目 Trending AI 招募 Google Play 内测人员(12 名)
android·github