使用钉钉第三方登录
第一步 去钉钉开发者平台注册App
钉钉开发者平台地址 注册自己的应用 *获取到自己的AppId 和 AppKey
钉钉开发者文档
实现步骤
1、注入依赖
implementation 'com.aliyun.ams:alicloud-android-push:3.2.+'
2、在您的包名相应目录下新建一个ddshare。
需要注意的是名字一定要相同
然后在AndroidManifest文件中添加exported属性,设置为true。
<activity
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:launchMode="singleInstance"
android:name="xxx.xxxx.xxxx.ddshare.DDShareActivity">
</activity>
换成你自己的路径名字
public class DDShareActivity extends Activity implements IDDAPIEventHandler {
private IDDShareApi mIDDShareApi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("lzc", "onCreate==========>");
EventBusManager.getInstance().register(this);
try {
mIDDShareApi = DDShareApiFactory.createDDShareApi(this,
"放入你的AppId",
true);
mIDDShareApi.handleIntent(getIntent(), this);
} catch (Exception e) {
e.printStackTrace();
Log.d("lzc", "错误信息===========>" + e.toString());
}
}
@Override
public void onReq(BaseReq baseReq) {
Log.d("lzc", "onReq=============>");
}
@Override
public void onResp(BaseResp baseResp) {
int errCode = baseResp.mErrCode;
Log.d("lzc", "errorCode==========>" + errCode);
String errMsg = baseResp.mErrStr;
Log.d("lzc", "errMsg==========>" + errMsg);
if (baseResp.getType() == ShareConstant.COMMAND_SENDAUTH_V2 && (baseResp instanceof SendAuth.Resp)) {
SendAuth.Resp authResp = (SendAuth.Resp) baseResp;
switch (errCode) {
case BaseResp.ErrCode.ERR_OK:
Logger.d( "授权成功");
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
BToast.showText(this, "授权取消");
break;
default:
BToast.showText(this, "登录失败" + baseResp.mErrStr);
break;
}
} else {
switch (errCode) {
case BaseResp.ErrCode.ERR_OK:
BToast.showText(this, "分享成功");
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
BToast.showText(this, "分享取消");
break;
default:
BToast.showText(this, "分享失败" + baseResp.mErrStr);
break;
}
}
finish();
}
}
3、调起钉钉登录的方式
IDDShareApi iddShareApi = DDShareApiFactory.createDDShareApi(LoginActivity.this, appKey, true);
if (!isInstalled) {
showToast("请安装钉钉");
return;
}
SendAuth.Req req = new SendAuth.Req();
boolean isSupport = req.getSupportVersion() <= iddShareApi.getDDSupportAPI();
if (!isSupport) {
showToast("不支持登录授权");
return;
}
req.scope = SendAuth.Req.SNS_LOGIN;
if (req.getSupportVersion() > iddShareApi.getDDSupportAPI()) {
showToast("钉钉版本过低,不支持登录授权");
return;
}
iddShareApi.sendReq(req);
到这里也就是可以跑起来了
4、遇到的问题
1、在Android 11版本的手机中明明安装了钉钉
但是会弹出“请安装钉钉的问题”
出现的原因:Android11 要检查下包的可见性
解决方法:<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
缺点:可能上架会卡审核
2、当跳转到钉钉授权的页面时,钉钉授权页面是空白的,弹出一个“出错了请重试”
出现的原因:因为包名或者签名不对
解决方法:查看安装的签名和包名是否和钉钉开发者平台的是否相同
|