微博SDK更新到11.6

This commit is contained in:
leafwai
2021-08-02 17:08:58 +08:00
parent ab60ed8473
commit 2e9642019b
8 changed files with 122 additions and 93 deletions

View File

@ -47,8 +47,7 @@ android {
ndk {
// 如果不添加 `arm64` 调用系统的 PackageManager 的方法读取安装包信息的时候会出现 native 层闪退,草
// 微博 SDK 没有 64位的 SO添加了 arm64 又会无法使用微博登录,下个版本更新微博 SDK 刻不容缓了!
abiFilters "armeabi-v7a", "x86"
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86"
}
renderscriptTargetApi 18
@ -344,6 +343,8 @@ dependencies {
implementation "com.aliyun.openservices:aliyun-log-android-sdk:${aliyunLog}"
implementation "com.github.princekin-f:EasyFloat:${easyFloat}"
implementation 'io.github.sinaweibosdk:core:11.6.0@aar'
implementation project(':libraries:LGLibrary')
// implementation project(':libraries:MTA')
implementation project(':libraries:QQShare')

Binary file not shown.

View File

@ -2,6 +2,7 @@ package com.gh.common.util;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
@ -13,6 +14,7 @@ public class AccessTokenKeeper {
private static final String PREFERENCES_NAME = "com_weibo_sdk_android";
private static final String KEY_UID = "uid";
private static final String KEY_USERNAME = "userName";
private static final String KEY_ACCESS_TOKEN = "access_token";
private static final String KEY_EXPIRES_IN = "expires_in";
private static final String KEY_REFRESH_TOKEN = "refresh_token";
@ -28,13 +30,14 @@ public class AccessTokenKeeper {
return;
}
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString(KEY_UID, token.getUid());
editor.putString(KEY_ACCESS_TOKEN, token.getToken());
editor.putString(KEY_USERNAME, token.getScreenName());
editor.putString(KEY_ACCESS_TOKEN, token.getAccessToken());
editor.putString(KEY_REFRESH_TOKEN, token.getRefreshToken());
editor.putLong(KEY_EXPIRES_IN, token.getExpiresTime());
editor.commit();
editor.apply();
}
/**
@ -48,14 +51,14 @@ public class AccessTokenKeeper {
return null;
}
Oauth2AccessToken token = new Oauth2AccessToken();
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
token.setUid(pref.getString(KEY_UID, ""));
token.setToken(pref.getString(KEY_ACCESS_TOKEN, ""));
token.setRefreshToken(pref.getString(KEY_REFRESH_TOKEN, ""));
token.setExpiresTime(pref.getLong(KEY_EXPIRES_IN, 0));
return token;
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
Bundle args = new Bundle();
args.putString(KEY_UID, pref.getString(KEY_UID, ""));
args.putString(KEY_USERNAME, pref.getString(KEY_USERNAME, ""));
args.putString(KEY_ACCESS_TOKEN, pref.getString(KEY_ACCESS_TOKEN, ""));
args.putString(KEY_REFRESH_TOKEN, pref.getString(KEY_REFRESH_TOKEN, ""));
args.putLong(KEY_EXPIRES_IN, pref.getLong(KEY_EXPIRES_IN, 0));
return Oauth2AccessToken.parseAccessToken(args);
}
/**
@ -68,9 +71,9 @@ public class AccessTokenKeeper {
return;
}
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.clear();
editor.commit();
editor.apply();
}
}

View File

@ -8,12 +8,11 @@ import com.gh.gamecenter.user.LoginTag
import com.halo.assistant.HaloApp
import com.lightgame.utils.RuntimeUtils
import com.lightgame.utils.Utils
import com.sina.weibo.sdk.WbSdk
import com.sina.weibo.sdk.auth.AuthInfo
import com.sina.weibo.sdk.auth.Oauth2AccessToken
import com.sina.weibo.sdk.auth.WbAuthListener
import com.sina.weibo.sdk.auth.WbConnectErrorMessage
import com.sina.weibo.sdk.auth.sso.SsoHandler
import com.sina.weibo.sdk.openapi.IWBAPI
import com.sina.weibo.sdk.openapi.WBAPIFactory
import com.tencent.mm.opensdk.modelmsg.SendAuth
import com.tencent.mm.opensdk.openapi.IWXAPI
import com.tencent.mm.opensdk.openapi.WXAPIFactory
@ -24,6 +23,7 @@ import org.json.JSONException
import org.json.JSONObject
import java.lang.ref.WeakReference
/**
* 第三方登录辅助类
*/
@ -36,7 +36,7 @@ object LoginHelper {
private var mTencent: Tencent // QQ
private var mIWXAPI: IWXAPI // 微信
private var mSsoHandler: WeakReference<SsoHandler>? = null // 微博
private lateinit var mWBAPI: IWBAPI // 微博
private var mQqLoginListener: IUiListener
@ -56,11 +56,17 @@ object LoginHelper {
Utils.log("QQLoginComplete::$s")
try {
mTencent.openId = o.getString("openid")
mTencent.setAccessToken(o.getString("access_token"), o.getString("expires_in"))
mTencent.setAccessToken(
o.getString("access_token"),
o.getString("expires_in")
)
val content = JSONObject()
content.put("openid", o.getString("openid"))
content.put("access_token_expire", Utils.getTime(context) + o.getLong("expires_in"))
content.put(
"access_token_expire",
Utils.getTime(context) + o.getLong("expires_in")
)
content.put("access_token", o.getString("access_token"))
mLoginCallback?.get()?.onLoginSuccess(LoginTag.qq, content) // 回调QQ登录成功
@ -87,7 +93,6 @@ object LoginHelper {
}
// DouYinOpenApiFactory.init(DouYinOpenConfig(Config.DOUYIN_CLIENTKEY))
Utils.log("LoginHelper initialization")
@ -120,7 +125,7 @@ object LoginHelper {
@JvmStatic
fun onWeiboLoginCallback(requestCode: Int, resultCode: Int, data: Intent?) {
mSsoHandler?.get()?.authorizeCallBack(requestCode, resultCode, data)
mWBAPI.authorizeCallback(requestCode, resultCode, data)
}
// QQ登录
@ -160,12 +165,14 @@ object LoginHelper {
// 微博登录
@JvmStatic
fun loginWithWeibo(loginCallback: LoginCallback, context: Activity) {
WbSdk.install(context, AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE))
mWBAPI = WBAPIFactory.createWBAPI(context) //初始化微博分享
mLoginCallback = WeakReference(loginCallback)
mSsoHandler = WeakReference(SsoHandler(context))
mSsoHandler?.get()?.authorizeClientSso(object : WbAuthListener {
override fun onSuccess(token: Oauth2AccessToken?) {
mWBAPI.registerApp(
context,
AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE)
)
mWBAPI.authorizeClient(object : WbAuthListener {
override fun onComplete(token: Oauth2AccessToken?) {
token?.let {
RuntimeUtils.getInstance().runOnUiThread {
mAccessToken = token
@ -179,8 +186,12 @@ object LoginHelper {
val content = JSONObject()
tryWithDefaultCatch {
content.put("uid", token.uid)
content.put("access_token", token.token)
content.put("access_token_expire", Utils.getTime(context) + token.expiresTime)
content.put("userName", token.screenName)
content.put("access_token", token.accessToken)
content.put(
"access_token_expire",
Utils.getTime(context) + token.expiresTime
)
content.put("refresh_token", token.refreshToken)
// content.put("refresh_token_expire", Utils.getTime(mContext) + 86400 * 30); // refresh_token 有效期30天
mLoginCallback?.get()?.onLoginSuccess(LoginTag.weibo, content)// 微博 登录回调
@ -188,14 +199,16 @@ object LoginHelper {
}
}
override fun onFailure(p0: WbConnectErrorMessage?) {
override fun onError(error: com.sina.weibo.sdk.common.UiError?) {
mLoginCallback?.get()?.onLoginFailure(LoginTag.weibo, "微博登录需要客户端支持,请先安装微博")
}
override fun cancel() {
override fun onCancel() {
mLoginCallback?.get()?.onLoginFailure(LoginTag.weibo, "取消授权")
}
})
// 第一次启动本应用AccessToken 不可用
mAccessToken = AccessTokenKeeper.readAccessToken(context)
}

View File

@ -11,11 +11,6 @@ import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.util.Base64;
import android.view.Gravity;
import android.view.KeyEvent;
@ -27,13 +22,15 @@ import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gh.common.Base64ImageHolder;
import com.gh.common.constant.Config;
import com.gh.gamecenter.R;
import com.gh.gamecenter.WeiBoShareActivity;
import com.lightgame.utils.Utils;
import com.sina.weibo.sdk.WbSdk;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.tencent.connect.auth.QQToken;
import com.tencent.connect.share.QQShare;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
@ -53,8 +50,6 @@ import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.Date;
import static com.gh.common.util.LoginHelper.WEIBO_SCOPE;
/**
* Created by khy on 2016/11/8.
*/
@ -284,23 +279,23 @@ public class MessageShareUtils {
// 分享
switch (type) {
case "qq" :
case "qq":
shareWay = ShareWay.qq;
qqShare();
break;
case "qq_zone" :
case "qq_zone":
shareWay = ShareWay.qqZone;
qZoneShare();
break;
case "wechat" :
case "wechat":
shareWay = ShareWay.wechat;
wechatShare();
break;
case "wechat_moments" :
case "wechat_moments":
shareWay = ShareWay.wechatMoments;
wechatMomentsShare();
break;
case "save" :
case "save":
String savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/ghzhushou/";
writeBitmap(savePath, "gh-" + new Date().getTime() + ".jpg", shareBm, true);
break;
@ -414,8 +409,6 @@ public class MessageShareUtils {
//新浪微博分享
public void weiboShare() {
WbSdk.install(mContext, new AuthInfo(mContext, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE));
Activity activity = mActivity.get();
if (activity != null) {
Intent intent = WeiBoShareActivity.getWeiboImageShareIntent(activity);

View File

@ -31,8 +31,6 @@ import com.gh.gamecenter.WeiBoShareActivity;
import com.gh.gamecenter.entity.ShareEntity;
import com.gh.gamecenter.eventbus.EBShare;
import com.lightgame.utils.Utils;
import com.sina.weibo.sdk.WbSdk;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
@ -51,8 +49,6 @@ import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import static com.gh.common.util.LoginHelper.WEIBO_SCOPE;
/**
* Created by khy on 2016/9/4.
*/
@ -175,7 +171,6 @@ public class ShareUtils {
mContext = context.getApplicationContext();
mTencent = Tencent.createInstance(Config.TENCENT_APPID, mContext); //初始化QQ分享
mIWXAPI = WXAPIFactory.createWXAPI(mContext, Config.WECHAT_APPID); //初始化微信分享
}
public static ShareUtils getInstance(Context context) {
@ -215,23 +210,23 @@ public class ShareUtils {
// 分享
switch (way) {
case "qq" :
case "qq":
mShareType = ShareType.qq;
qqShare();
break;
case "qq_zone" :
case "qq_zone":
mShareType = ShareType.qqZone;
qZoneShare();
break;
case "wechat" :
case "wechat":
mShareType = ShareType.wechat;
wechatShare();
break;
case "wechat_moments" :
case "wechat_moments":
mShareType = ShareType.wechatMoments;
wechatMomentsShare();
break;
case "weibo" :
case "weibo":
mShareType = ShareType.weibo;
sinaWeiboShare();
break;
@ -665,8 +660,6 @@ public class ShareUtils {
shareType = "sina_weibo";
LogUtils.uploadShareType(shareType, shareEntrance.getName(), shareUrl, mTitle, mSummary, resourceId);
WbSdk.install(mContext, new AuthInfo(mContext, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE));
if (mShareEntrance == ShareEntrance.qaDetail) {
mTitle = "向你推荐:" + mTitle + " @光环助手 " + shareUrl;
mSummary = "";

View File

@ -13,6 +13,7 @@ import android.util.Base64;
import androidx.annotation.NonNull;
import com.gh.common.Base64ImageHolder;
import com.gh.common.constant.Config;
import com.gh.common.util.BiCallback;
import com.gh.common.util.EnergyTaskHelper;
import com.gh.common.util.ImageUtils;
@ -25,13 +26,17 @@ import com.sina.weibo.sdk.api.ImageObject;
import com.sina.weibo.sdk.api.TextObject;
import com.sina.weibo.sdk.api.WebpageObject;
import com.sina.weibo.sdk.api.WeiboMultiMessage;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.common.UiError;
import com.sina.weibo.sdk.openapi.IWBAPI;
import com.sina.weibo.sdk.openapi.WBAPIFactory;
import com.sina.weibo.sdk.share.WbShareCallback;
import com.sina.weibo.sdk.share.WbShareHandler;
import com.sina.weibo.sdk.utils.Utility;
import org.greenrobot.eventbus.EventBus;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.UUID;
/**
* Created by khy on 2016/11/23.
@ -48,6 +53,11 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
private static final String KET_TYPE = "KET_TYPE";
private static final String KET_SUMMARY = "KET_SUMMARY";
private static final String WEIBO_SCOPE = (
"email,direct_messages_read,direct_messages_write,"
+ "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
+ "follow_app_official_microblog," + "invitation_write");
private String shareUrl;
private String mShareStyle;
@ -55,7 +65,7 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
private String mSummary;
private String mShareType;
private WbShareHandler mWeiboShareAPI;
private IWBAPI mWBAPI;
@NonNull
public static Intent getWeiboShareIntent(Context context, String shareUrl, String shareIcon,
@ -103,14 +113,14 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
Utils.toast(this, R.string.share_skip);
mWeiboShareAPI = new WbShareHandler(this);
mWeiboShareAPI.registerApp();
mWBAPI = WBAPIFactory.createWBAPI(this);
mWBAPI.registerApp(this, new AuthInfo(this, Config.WEIBO_APPKEY, "http://www.sina.com", WEIBO_SCOPE));
if ("NORMAL".equals(mShareStyle)) {
if (shareIcon != null) {
loadIconAndShare(shareIcon);
} else {
onWbShareFail();
onError(new UiError(0, "", ""));
}
} else if ("IMAGE".equals(mShareStyle)) {
shareImage();
@ -120,7 +130,7 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
mWeiboShareAPI.doResultIntent(intent, this); //当前应用唤起微博分享后,返回当前应用
mWBAPI.doResultIntent(intent, this); //当前应用唤起微博分享后,返回当前应用
}
private void loadIconAndShare(String iconUrl) {
@ -158,22 +168,37 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
}
ImageObject imageObject = new ImageObject();
imageObject.setImageObject(bgBitmap);//设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。
imageObject.setImageData(bgBitmap);//设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。
WebpageObject webObject = new WebpageObject();
webObject.identify = Utility.generateGUID();
webObject.identify = UUID.randomUUID().toString();
webObject.title = "";
webObject.description = getString(R.string.app_name);
webObject.defaultText = getString(R.string.app_name);
webObject.actionUrl = shareUrl;
webObject.setThumbImage(bgBitmap);
ByteArrayOutputStream os = null;
try {
os = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, os);
webObject.thumbData = os.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();//初始化微博的分享消息
weiboMessage.textObject = textObject;
weiboMessage.imageObject = imageObject;
weiboMessage.mediaObject = webObject;
mWeiboShareAPI.shareMessage(weiboMessage, false);
mWBAPI.shareMessage(weiboMessage, false);
}
@Override
@ -189,14 +214,14 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
// 转完后重新置位
Base64ImageHolder.INSTANCE.setImage("");
Bitmap compressBitmap = compressBitmap(bitmap) ;
Bitmap compressBitmap = compressBitmap(bitmap);
ImageObject imageObject = new ImageObject();
imageObject.setImageObject(compressBitmap);
imageObject.setImageData(compressBitmap);
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();//初始化微博的分享消息
weiboMessage.imageObject = imageObject;
mWeiboShareAPI.shareMessage(weiboMessage, false);
mWBAPI.shareMessage(weiboMessage, false);
}
public Bitmap compressBitmap(Bitmap bitmap) {
@ -223,7 +248,7 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
}
@Override
public void onWbShareSuccess() {
public void onComplete() {
Utils.toast(this, R.string.share_success_hint);
if ("NORMAL".equals(mShareStyle)) {
LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "success",
@ -240,22 +265,7 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
}
@Override
public void onWbShareCancel() {
Utils.toast(this, R.string.share_cancel_hint);
if ("NORMAL".equals(mShareStyle)) {
LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "cancel",
ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId);
if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) {
IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博");
}
} else {
IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博");
}
finish();
}
@Override
public void onWbShareFail() {
public void onError(UiError uiError) {
Utils.toast(this, R.string.share_fail_hint);
if ("NORMAL".equals(mShareStyle)) {
LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "fail",
@ -268,4 +278,19 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
}
finish();
}
@Override
public void onCancel() {
Utils.toast(this, R.string.share_cancel_hint);
if ("NORMAL".equals(mShareStyle)) {
LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "cancel",
ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId);
if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) {
IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博");
}
} else {
IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博");
}
finish();
}
}

View File

@ -302,7 +302,8 @@ LoginFragment extends NormalFragment implements LoginUtils.onCaptchaCallBackList
DialogUtils.showQuickLoginPermissionDialog(
requireContext(),
() -> PermissionHelper.checkReadPhoneStatePermissionBeforeAction(requireContext(), this::startQuickLogin),
() -> {}
() -> {
}
);
}
}
@ -337,7 +338,7 @@ LoginFragment extends NormalFragment implements LoginUtils.onCaptchaCallBackList
toast("手机号码不能为空");
return;
} else if (!isAgreePolicy()) {
return;
return;
} else if (TextUtils.isEmpty(code)) {
toast("验证码不能为空");
return;