android 微博登录与分享集成
16lz
2021-01-26
android 微博登录与分享集成
一、在微博开放平台上注册自己的应用,获取应用的APP_KEY, 注册过程就不多说了,大家都会的
二、首先看下项目截图
三、build.gradle里面加入微博登录所需要的包
五、new_file.html里面的html就不贴出来了,就是简单的按钮然后js调用android,然后在JavaScriptUtils里面android回调js返回结果。JavaScriptUtils是这样申明接口的
一、在微博开放平台上注册自己的应用,获取应用的APP_KEY, 注册过程就不多说了,大家都会的
二、首先看下项目截图
三、build.gradle里面加入微博登录所需要的包
// 微博登录compile 'com.sina.weibo.sdk:core:4.2.7:openDefaultRelease@aar'三、AndroidManifest.xml加入所需要的网络权限
四、Constant类 package com.iwiteks.PalmarTourism.util;/** * Created by spirits on 2018/3/20. */public class Constant { /** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */ public static final String APP_KEY = "*************"; /** * 当前 DEMO 应用的回调页,第三方应用可以使用自己的回调页。 * 建议使用默认回调页:https://api.weibo.com/oauth2/default.html */ public static final String REDIRECT_URL = "http://www.sina.com"; /** * WeiboSDKDemo 应用对应的权限,第三方开发者一般不需要这么多,可直接设置成空即可。 * 详情请查看 Demo 中对应的注释。 */ public 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";}
五、new_file.html里面的html就不贴出来了,就是简单的按钮然后js调用android,然后在JavaScriptUtils里面android回调js返回结果。JavaScriptUtils是这样申明接口的
public static final int WEIBO_LOGIN = 6009;public static final int WEIBO_SHARE = 6010;/** * 微博登录 */@JavascriptInterfacepublic void wbLogin () { MainActivity.mHandle.sendEmptyMessage(WEIBO_LOGIN);}/** * 微博分享 */@JavascriptInterfacepublic void wbShare(){ MainActivity.mHandle.sendEmptyMessage(WEIBO_SHARE);}六、MainActivity,精华都在这,收到消息后的处理
// 接受消息回调public static Handler mHandle = new Handler() { @Override public void handleMessage(Message msg) { if(msg.what == JavaScriptUtils.WEIBO_LOGIN){ AuthInfo mAuthInfo = new AuthInfo(mActivity, Constant.APP_KEY, Constant.REDIRECT_URL, Constant.SCOPE); WbSdk.install(mActivity,mAuthInfo); mSsoHandler = new SsoHandler(mActivity); mSsoHandler.authorize(new AuthListener()); }else if (msg.what == JavaScriptUtils.WEIBO_SHARE) { WbSdk.install(mActivity,new AuthInfo(mActivity, Constant.APP_KEY,Constant.REDIRECT_URL, Constant.SCOPE));//创建微博API接口类对象 shareHandler = new WbShareHandler(mActivity); shareHandler.registerApp(); sendMultiMessage(true,true); } }};在mHandle里面用到的方法也写在MainActivity里面如下,一个AuthInfo监听和一个sendMultiMessage方法如下
/** * 微博登录监听 */private static class AuthListener implements WbAuthListener { Thread thread = new Thread(); @Override public void onSuccess(Oauth2AccessToken oauth2AccessToken) { OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.newBuilder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build(); Request request = new Request.Builder() .url("https://api.weibo.com/2/users/show.json?access_token=" + oauth2AccessToken.getToken() + "&uid=" + oauth2AccessToken.getUid()) .get() .build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { mActivity.runOnUiThread(new Runnable() { @Override public void run() { try { String result = response.body().string(); Message message = new Message(); message.what = JavaScriptUtils.WEIBO_LOGIN; message.obj = result; JavaScriptUtils.mHandler.sendMessage(message); } catch (IOException e) { e.printStackTrace(); } } }); } else { } } }); } @Override public void cancel() { Toast.makeText(mActivity, "登录取消", Toast.LENGTH_SHORT).show(); } @Override public void onFailure(WbConnectErrorMessage wbConnectErrorMessage) { Toast.makeText(mActivity, "登录失败", Toast.LENGTH_SHORT).show(); }}/** * 微博分享监听 */@Overridepublic void onWbShareSuccess() { Toast.makeText(mActivity, "分享成功", Toast.LENGTH_SHORT).show(); Message message = new Message(); message.what = JavaScriptUtils.WEIBO_SHARE; message.obj = "success"; JavaScriptUtils.mHandler.sendMessage(message);}@Overridepublic void onWbShareCancel() { Toast.makeText(mActivity, "分享取消", Toast.LENGTH_SHORT).show(); Message message = new Message(); message.what = JavaScriptUtils.WEIBO_SHARE; message.obj = "cancel"; JavaScriptUtils.mHandler.sendMessage(message);}@Overridepublic void onWbShareFail() { Toast.makeText(mActivity, "分享失败", Toast.LENGTH_SHORT).show(); Message message = new Message(); message.what = JavaScriptUtils.WEIBO_SHARE; message.obj = "fail"; JavaScriptUtils.mHandler.sendMessage(message);}/** * 第三方应用发送请求消息到微博,唤起微博分享界面实现方法。 */private static void sendMultiMessage(boolean hasText, boolean hasImage) { WeiboMultiMessage weiboMessage = new WeiboMultiMessage(); if (hasText) { weiboMessage.textObject = getTextObj(); } if (hasImage) { weiboMessage.imageObject = getImageObj(mActivity); } shareHandler.shareMessage(weiboMessage, false);}/** * 创建文本消息对象。 * @return 文本消息对象。 */private static TextObject getTextObj() { TextObject textObject = new TextObject(); textObject.text = "这里是分享的内容"; textObject.title = "演员赵诗绎"; textObject.actionUrl = "http://www.baidu.com"; return textObject;}/** * 创建图片消息对象。 * @return 图片消息对象。 */private static ImageObject getImageObj(Context context) { ImageObject imageObject = new ImageObject(); Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher); imageObject.setImageObject(bitmap); return imageObject;}/** * 处理微博分享的回调 */@Overrideprotected void onNewIntent(Intent intent){ super.onNewIntent(intent); shareHandler.doResultIntent(intent,this);}在微博登录的监听类里面获取到用户信息之后又发送消息到JavaScriptUtils里面的Handle里面去调用h5方法然后就返回用户信息给前端了。我还是贴一下吧,JavaScriptUtils类里面写的
// 消息接受handle,android调用jspublic static Handler mHandler = new Handler() { public void handleMessage(Message msg) { String method = ""; if (msg.what == WEIBO_LOGIN) { String result = (String) msg.obj; method = "javascript:_Native_weiboLogin("+result+")"; } else if (msg.what == WEIBO_SHARE) { String result = (String) msg.obj; method = "javascript:_Native_weiboShare('"+result+"')"; } mWebView.evaluateJavascript(method, new ValueCallback至此在集成微博登录与分享的时候也要注意app签名,需要一致才可以集成成功,和微信登录一样,用debug版本签名即可测试成功,微信登录与分享release版本修改的签名有延迟,而dubug版本秒改,所以在修改release版本签名的时候需要等待。() { @Override public void onReceiveValue(String value) { //此处为 js 返回的结果 } }); }};
更多相关文章
- Android聊天列表Demo(QQ,微信,等通讯工具的聊天列表)
- Android异步消息处理机制 深入理解Looper、Handler、Message的关
- Android(安卓)使用极光推送自定义消息打造个性的消息推送效果
- Android一键分享至社交平台
- Android之SqliteDatabase(MVP模式)实现用户登录注册功能
- Android通讯录管理(获取联系人、通话记录、短信消息)(一)
- 从破解APP开始学Android——用户登录验证
- android 某些三星手机上不显示通知Notification和消息Toast
- Android消息机制源码阅读