前言导读
各位同学大家好,有段时间没有跟大家见面了,最近因为换了新工作,所以也是遇到一些新的需求和业务,正好需要接一个韩国的第三方登录,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应用,有兴趣的同学可以查阅官方文档去查看更多自己需要的功能