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

相关推荐
文人sec12 小时前
MySQL主库出问题了,从库怎么办?备库为什么会延迟好几个小时?
android·数据库·mysql
hai_android12 小时前
不用 AIDL,手把手教你手写 Binder 代理类
android·kotlin
mmsx13 小时前
osmdroid 地图实战 03|地图的"分层世界":离线方案、图层模型与 Overlay 体系
android·前端
张文是假的啊14 小时前
IOC依赖注入问题:@Primary 和 @Qualifier的使用
android
换元不配限15 小时前
ConstraintLayout核心用法详解(三):引导线、屏障、组和占位
android·placeholder·barrier·约束布局·guideline
心平气和量大福大16 小时前
android studio(AS)工具-调试-统计总行数
android·ide·android studio
你的坚定18 小时前
SurfaceFlinger合成一帧的完整流程
android
爱笑鱼19 小时前
Android 系统启动机制(七):进入 SystemServer.main() 以后,system_server 还是一个空进程吗?
android·linux
好安静19 小时前
SurfaceFlinger 合成一帧的完整流程
android
alexhilton19 小时前
架构测试为何需要双视图
android·kotlin·android jetpack