Android 使用第三方登录(QQ和新浪微博)
账号申请什么的我就在这里略过了!(相信大家看看文档都能够处理的)本篇博客仅作引导用--主要提供给哪些不知道怎样入手的朋友。(如果需要更加强大的功能大家可以看一下开放平台上的文档,上面都有的)
使用QQ登录需要在QQ互联开放平台上注册一个账号并提交审核:http://connect.qq.com/intro/login
使用新浪微博登录需要到新浪微博开放平台注册账号:http://open.weibo.com/development/mobile
新浪微博登录的处理代码:(需要下载新浪微博的SDK)
import java.io.ByteArrayOutputStream; import java.io.FileWriter; import java.io.IOException; import java.text.SimpleDateFormat; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.text.TextUtils; import android.widget.Toast; import com.hd.client.BindActivity; import com.sina.weibo.sdk.auth.Oauth2AccessToken; import com.sina.weibo.sdk.auth.WeiboAuthListener; import com.sina.weibo.sdk.auth.WeiboAuth.AuthInfo; import com.sina.weibo.sdk.exception.WeiboException; import com.sina.weibo.sdk.net.RequestListener; import com.sina.weibo.sdk.widget.LoginButton; /** * 新浪微博登录工具类 * @author yw-tony * */ public class SinaLoginUtil { private static final String appkey = "你的appkey"; // http://www.sina.comhttp://www.fortrun.com private static final String redirectUrl = "http://www.fortrun.com"; private static final String SCOPE = "email,direct_messages_read,direct_messages_write," + "friendships_groups_read,friendships_groups_write,statuses_to_me_read," + "follow_app_official_microblog," + "invitation_write"; /** 登陆认证对应的listener */ private AuthListener mLoginListener = new AuthListener(); /** 登出操作对应的listener */ private LogOutRequestListener mLogoutListener = new LogOutRequestListener(); private Context context; private AuthInfo authInfo = null; public String token = ",";private SinaLoginUtil(){} private static SinaLoginUtil instance = new SinaLoginUtil(); public static SinaLoginUtil getInstance(){ return instance; } public void initSina(Context context,LoginButton loginButton){ this.context = context; // 创建授权认证信息 authInfo = new AuthInfo(context, "你的appkey",redirectUrl, SCOPE); loginButton.setWeiboAuthInfo(authInfo, mLoginListener); } /** * 登入按钮的监听器,接收授权结果。 */ private class AuthListener implements WeiboAuthListener { @Override public void onComplete(Bundle values) { final Oauth2AccessToken accessToken = Oauth2AccessToken.parseAccessToken(values); if (accessToken != null && accessToken.isSessionValid()) { /*String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format( new java.util.Date(accessToken.getExpiresTime()));*/ // String format = getString(R.string.weibosdk_demo_token_to_string_format_1); // mTokenView.setText(String.format(format, accessToken.getToken(), date)); AccessTokenKeeper.writeAccessToken(context, accessToken); } } /** * 登出按钮的监听器,接收登出处理结果。(API 请求结果的监听器) */ private class LogOutRequestListener implements RequestListener { @Override public void onComplete(String response) { if (!TextUtils.isEmpty(response)) { try { JSONObject obj = new JSONObject(response); String value = obj.getString("result"); if ("true".equalsIgnoreCase(value)) { AccessTokenKeeper.clear(context); // mTokenView.setText(R.string.weibosdk_demo_logout_success); } } catch (JSONException e) { e.printStackTrace(); } } } @Override public void onComplete4binary(ByteArrayOutputStream responseOS) { // Do nothing } @Override public void onIOException(IOException e) { // mTokenView.setText(R.string.weibosdk_demo_logout_failed); } @Override public void onError(WeiboException e) { // mTokenView.setText(R.string.weibosdk_demo_logout_failed); } } }
QQ登录:
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import android.widget.Toast; import com.google.gson.JsonObject; import com.hd.client.BindActivity; import com.tencent.tauth.IUiListener; import com.tencent.tauth.Tencent; import com.tencent.tauth.UiError; /** * 使用QQ登陆工具类 * @author yw-tony * */ public class QQLoginUtil { public String token = ","; public Tencent tencen = null; private static String APP_ID = "你的Appid"; private Context context; private QQLoginUtil(){} private static QQLoginUtil instance = new QQLoginUtil(); public static QQLoginUtil getInstance(){ return instance; } public void initTencen(Context context){ tencen = Tencent.createInstance(APP_ID, context); this.context = context; } public void qqLogin(Activity activity){ if (!tencen.isSessionValid()) { IUiListener listener = new BaseUiListener() { @Override protected void doComplete(JSONObject values) { /*updateUserInfo(); updateLoginButton();*/ } }; tencen.login(activity, "all", listener); } else { tencen.logout(activity); // updateUserInfo(); // updateLoginButton(); } } private class BaseUiListener implements IUiListener { @Override public void onComplete(JSONObject response) { // Util.showResultDialog(MainActivity.this, response.toString(), "登录成功"); Log.e("响应字符串", response.toString()); doComplete(response); } protected void doComplete(final JSONObject values) { } @Override public void onError(UiError e) { Log.e("错误信息", e.errorDetail); // Util.toastMessage(MainActivity.this, "onError: " + e.errorDetail); // Util.dismissDialog(); } @Override public void onCancel() { Log.e("取消了当前的登录操作", "取消了当前的登录操作"); // Util.toastMessage(context, "onCancel: "); // Util.dismissDialog(); } } }
分类:
Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库