package com.gh.gamecenter; import static com.gh.gamecenter.common.constant.EntranceConsts.KET_SHAREICON; import static com.gh.gamecenter.common.constant.EntranceConsts.KET_SHAREURL; import static com.gh.gamecenter.common.constant.EntranceConsts.KET_SHARE_STYLE; import static com.gh.gamecenter.common.constant.EntranceConsts.KET_SUMMARY; import static com.gh.gamecenter.common.constant.EntranceConsts.KET_TITLE; import static com.gh.gamecenter.common.constant.EntranceConsts.KET_TYPE; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.media.ThumbnailUtils; import android.os.Bundle; import android.util.Base64; import androidx.annotation.NonNull; import com.therouter.router.Route; import com.therouter.TheRouter; import com.gh.common.constant.Config; import com.gh.common.util.IntegralLogHelper; import com.gh.gamecenter.common.callback.BiCallback; import com.gh.gamecenter.common.constant.RouteConsts; import com.gh.gamecenter.common.eventbus.EBShare; import com.gh.gamecenter.common.utils.BitmapUtils; import com.gh.gamecenter.common.utils.ImageUtils; import com.gh.gamecenter.common.utils.SensorsBridge; import com.gh.gamecenter.common.utils.ShareUtils; import com.gh.gamecenter.core.provider.IAppProvider; import com.lightgame.utils.Utils; import com.sina.weibo.sdk.api.ImageObject; import com.sina.weibo.sdk.api.TextObject; 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 org.greenrobot.eventbus.EventBus; import java.io.ByteArrayOutputStream; /** * Created by khy on 2016/11/23. *

* 微博分享 */ @Route(path = RouteConsts.activity.weiBoShareActivity) public class WeiBoShareActivity extends Activity implements WbShareCallback { private final IAppProvider mAppProvider = TheRouter.get(IAppProvider.class); 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; private String mTitle; private String mSummary; private String mShareType; private IWBAPI mWBAPI; @NonNull public static Intent getWeiboShareIntent(Context context, String shareUrl, String shareIcon, String shareTitle, String shareSummary, String shareType) { Intent intent = new Intent(context, WeiBoShareActivity.class); Bundle bundle = new Bundle(); bundle.putString(KET_SHARE_STYLE, "NORMAL"); bundle.putString(KET_TITLE, shareTitle); bundle.putString(KET_SHAREICON, shareIcon); bundle.putString(KET_SUMMARY, shareSummary); bundle.putString(KET_SHAREURL, shareUrl); bundle.putString(KET_TYPE, shareType); intent.putExtras(bundle); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } // 分享图片专用 @NonNull public static Intent getWeiboImageShareIntent(Context context) { Intent intent = new Intent(context, WeiBoShareActivity.class); Bundle bundle = new Bundle(); bundle.putString(KET_SHARE_STYLE, "IMAGE"); intent.putExtras(bundle); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (mAppProvider != null) { mAppProvider.setDisableSplashAdTemporarily(true); } Bundle extras = getIntent().getExtras(); if (extras == null) return; String shareIcon = null; mShareStyle = extras.getString(KET_SHARE_STYLE); if ("NORMAL".equals(mShareStyle)) { mTitle = extras.getString(KET_TITLE); shareIcon = extras.getString(KET_SHAREICON); mSummary = extras.getString(KET_SUMMARY); shareUrl = extras.getString(KET_SHAREURL); mShareType = extras.getString(KET_TYPE); } Utils.toast(this, com.gh.gamecenter.common.R.string.share_skip); 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 { onError(new UiError(0, "", "")); } } else if ("IMAGE".equals(mShareStyle)) { shareImage(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (mWBAPI != null) { mWBAPI.doResultIntent(data, this); } } private void loadIconAndShare(String iconUrl) { ImageUtils.getBitmap(iconUrl, new BiCallback() { @Override public void onFirst(Bitmap bitmap) { Utils.log("分享获取bitmap成功,准备分享"); if (ShareUtils.ShareEntrance.video.name().equals(mShareType)) { // 分享类型为视频时裁为正方形 int dimension = Math.min(bitmap.getWidth(), bitmap.getHeight()); bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension); } Bitmap compressBp = BitmapUtils.compressBitmap(bitmap, 200); Bitmap bgBitmap; if (ShareUtils.ShareEntrance.askInvite.name().equals(mShareType) || ShareUtils.ShareEntrance.askNormal.name().equals(mShareType)) { bgBitmap = compressBp; } else { bgBitmap = ShareUtils.getInstance(getApplicationContext()).addBackGround(compressBp); } TextObject textObject = new TextObject(); if (ShareUtils.ShareEntrance.tools.name().equals(mShareType)) { textObject.text = mTitle + "@光环的游戏日常"; } else if (ShareUtils.ShareEntrance.shareGh.name().equals(mShareType)) { textObject.text = "这个App可以下载各种热门卡牌手游的加速版,绿色安全,超级省心,做日常效率提高3-5倍!不用肝的感觉真好! @光环的游戏日常"; } else if (ShareUtils.ShareEntrance.plugin.name().equals(mShareType) || ShareUtils.ShareEntrance.game.name().equals(mShareType)) { textObject.text = "向你推荐:" + mTitle + " @光环的游戏日常 "; } else if (ShareUtils.ShareEntrance.video.name().equals(mShareType) || ShareUtils.ShareEntrance.communityArticle.name().equals(mShareType) || ShareUtils.ShareEntrance.askNormal.name().equals(mShareType)) { textObject.text = mTitle + shareUrl + "(@光环的游戏日常)"; } else { textObject.text = mTitle + " @光环的游戏日常 "; } ImageObject imageObject = new ImageObject(); imageObject.setImageData(bgBitmap);//设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。 /*WebpageObject webObject = new WebpageObject(); webObject.identify = UUID.randomUUID().toString(); webObject.title = ""; webObject.description = getString(R.string.app_name); webObject.defaultText = getString(R.string.app_name); webObject.actionUrl = shareUrl; 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; if (!ShareUtils.ShareEntrance.video.name().equals(mShareType)) { weiboMessage.imageObject = imageObject; } // weiboMessage.mediaObject = webObject; mWBAPI.shareMessage(WeiBoShareActivity.this, weiboMessage, false); } @Override public void onSecond(Boolean aBoolean) { } }); } private void shareImage() { // base64转bitmap byte[] decode = Base64.decode(ImageViewerActivity.base64Image, Base64.DEFAULT); Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length); // 转完后重新置位 ImageViewerActivity.base64Image = ""; Bitmap compressBitmap = compressBitmap(bitmap); ImageObject imageObject = new ImageObject(); imageObject.setImageData(compressBitmap); WeiboMultiMessage weiboMessage = new WeiboMultiMessage();//初始化微博的分享消息 weiboMessage.imageObject = imageObject; mWBAPI.shareMessage(WeiBoShareActivity.this, weiboMessage, false); } public Bitmap compressBitmap(Bitmap bitmap) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); float zoom = (float) Math.sqrt(500 * 1024 / (float) bos.toByteArray().length); Matrix matrix = new Matrix(); matrix.setScale(zoom, zoom); Bitmap result = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); bos.reset(); result.compress(Bitmap.CompressFormat.JPEG, 100, bos); while (bos.toByteArray().length > 500 * 1024) { System.out.println(bos.toByteArray().length); matrix.setScale(0.9f, 0.9f); result = Bitmap.createBitmap(result, 0, 0, result.getWidth(), result.getHeight(), matrix, true); bos.reset(); result.compress(Bitmap.CompressFormat.JPEG, 100, bos); } return result; } @Override public void onComplete() { Utils.toast(this, com.gh.gamecenter.common.R.string.share_success_hint); if ("NORMAL".equals(mShareStyle)) { com.gh.gamecenter.common.utils.LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "success", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); EventBus.getDefault().post(new EBShare(ShareUtils.shareEntrance, "新浪微博")); if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("成功", "微博"); } if (ShareUtils.additionalParams != null && (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video)) { com.gh.gamecenter.common.utils.NewLogUtils.logShareResult(ShareUtils.additionalParams, true); SensorsBridge.trackArticleShareResult( ShareUtils.additionalParams.getCustomerType(), ShareUtils.additionalParams.getContentId(), ShareUtils.additionalParams.getBbsId(), ShareUtils.additionalParams.getBbsType(), ShareUtils.additionalParams.getActivityTagName(), ShareUtils.additionalParams.getGameForumType(), ShareUtils.additionalParams.getContentType(), "新浪微博", "分享成功" ); } else if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.gameCollection) { com.gh.gamecenter.common.utils.NewLogUtils.logViewOrClickGameCollectionDetail( "click_game_collect_detail_favorite_success", ShareUtils.shareEntity.getShareTitle(), ShareUtils.resourceId, "新浪微博" ); SensorsBridge.trackEvent( "GameCollectDetailShareClickSuccess", "game_collect_title", ShareUtils.shareEntity.getShareTitle(), "game_collect_id", ShareUtils.resourceId, "share_type", "新浪微博" ); } } else { IntegralLogHelper.INSTANCE.logInviteResult("成功", "微博"); } finish(); } @Override public void onError(UiError uiError) { Utils.toast(this, com.gh.gamecenter.common.R.string.share_fail_hint); if ("NORMAL".equals(mShareStyle)) { com.gh.gamecenter.common.utils.LogUtils.uploadShareResult(ShareUtils.shareType, ShareUtils.shareEntrance.getName(), "fail", ShareUtils.shareEntity.getShareUrl(), ShareUtils.shareEntity.getShareTitle(), ShareUtils.shareEntity.getSummary(), ShareUtils.resourceId); if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.inviteFriends) { IntegralLogHelper.INSTANCE.logInviteResult("失败", "微博"); } if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { com.gh.gamecenter.common.utils.NewLogUtils.logShareResult(ShareUtils.additionalParams, false); } if(ShareUtils.additionalParams != null && (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal)) { SensorsBridge.trackArticleShareResult( ShareUtils.additionalParams.getCustomerType(), ShareUtils.additionalParams.getContentId(), ShareUtils.additionalParams.getBbsId(), ShareUtils.additionalParams.getBbsType(), ShareUtils.additionalParams.getActivityTagName(), ShareUtils.additionalParams.getGameForumType(), ShareUtils.additionalParams.getContentType(), "新浪微博", "分享失败" ); } } else { IntegralLogHelper.INSTANCE.logInviteResult("失败", "微博"); } finish(); } @Override public void onCancel() { Utils.toast(this, com.gh.gamecenter.common.R.string.share_cancel_hint); if ("NORMAL".equals(mShareStyle)) { com.gh.gamecenter.common.utils.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("取消", "微博"); } if (ShareUtils.shareEntrance == ShareUtils.ShareEntrance.askNormal || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.communityArticle || ShareUtils.shareEntrance == ShareUtils.ShareEntrance.video) { com.gh.gamecenter.common.utils.NewLogUtils.logShareResult(ShareUtils.additionalParams, false); } } else { IntegralLogHelper.INSTANCE.logInviteResult("取消", "微博"); } finish(); } @Override protected void onDestroy() { super.onDestroy(); if (mAppProvider != null) { mAppProvider.setDisableSplashAdTemporarily(false); } } }