From b846e3765ea159b6f4613cac976ff82fd2d2f36f Mon Sep 17 00:00:00 2001 From: huangjian Date: Wed, 19 Oct 2022 16:39:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=85=A5MobLink?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yizhuan/erban/AgentActivity.java | 100 +++++++++ .../java/com/yizhuan/erban/MainActivity.java | 10 +- .../erban/application/XChatApplication.java | 22 ++ .../avroom/fragment/HomePartyFragment.java | 1 - .../erban/other/activity/SplashActivity.java | 6 + .../xchat_android_core/share/IShareModel.java | 4 +- .../xchat_android_core/share/ShareModel.java | 195 +++++++++--------- core/src/main/res/values/strings.xml | 3 + mob.gradle | 5 +- 9 files changed, 242 insertions(+), 104 deletions(-) create mode 100644 app/src/main/java/com/yizhuan/erban/AgentActivity.java diff --git a/app/src/main/java/com/yizhuan/erban/AgentActivity.java b/app/src/main/java/com/yizhuan/erban/AgentActivity.java new file mode 100644 index 000000000..17533d8a3 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/AgentActivity.java @@ -0,0 +1,100 @@ +package com.yizhuan.erban; + +import android.app.ActivityManager; +import android.content.ComponentName; +import android.content.Intent; +import android.os.Build; + +import androidx.appcompat.app.AppCompatActivity; + +import com.mob.moblink.MobLink; +import com.mob.moblink.Scene; +import com.mob.moblink.SceneRestorable; +import com.yizhuan.erban.other.activity.SplashActivity; +import com.yizhuan.xchat_android_core.linked.LinkedModel; +import com.yizhuan.xchat_android_core.linked.bean.LinkedInfo; +import com.yizhuan.xchat_android_core.user.UserModel; + +import java.util.HashMap; +import java.util.List; + +public class AgentActivity extends AppCompatActivity implements SceneRestorable { + + + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + setIntent(intent); + MobLink.updateNewIntent(getIntent(), this); + } + + @Override + public void onReturnSceneData(Scene scene) { + + try { + HashMap params = scene.getParams(); + + LinkedInfo info = LinkedModel.get().getLinkedInfo(); + if (info == null) { + info = new LinkedInfo(); + } + + if (params.get("mobLinkType") != null) { + Integer mobLinkType = (Integer) params.get("mobLinkType"); + info.setType(mobLinkType + ""); + } + if (params.get("ROOM_UID") != null) { + String roomid = (String) params.get("ROOM_UID"); + info.setRoomUid(roomid); + } + if (params.get("inviteCode") != null) { + String inviteCode = (String) params.get("inviteCode"); + info.setInviteCode(inviteCode); + } + + LinkedModel.get().setLinkedInfo(info); + + } catch (Exception e) { + } + + + if (isExistMainActivity(MainActivity.class) && UserModel.get().getCacheLoginUserInfo() != null) {//应用已开启&用户信息以获取 + MainActivity.handleLinkedJump(this); + } else {//应用未开启 + SplashActivity.start(this); + } + finish(); + } + + public boolean isExistMainActivity(Class activity) { + try { + Intent intent = new Intent(this, activity); + ComponentName cmpName = intent.resolveActivity(getPackageManager()); + boolean flag = false; + if (cmpName != null) { + ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + List taskInfoList = am.getAppTasks(); + for (ActivityManager.AppTask taskInfo : taskInfoList) { + if (taskInfo.getTaskInfo().baseActivity.equals(cmpName)) { + flag = true; + break; + } + } + } else { + List taskInfoList = am.getRunningTasks(10); + for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) { + if (taskInfo.baseActivity.equals(cmpName)) { + flag = true; + break; + } + } + } + + } + return flag; + } catch (Throwable e) { + return false; + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/MainActivity.java b/app/src/main/java/com/yizhuan/erban/MainActivity.java index 089520cf1..10be2e6b4 100644 --- a/app/src/main/java/com/yizhuan/erban/MainActivity.java +++ b/app/src/main/java/com/yizhuan/erban/MainActivity.java @@ -300,7 +300,7 @@ public class MainActivity extends BaseMvpActivity //这里是为了处理APP后台运行的情况下点击分享房间等LinkedMe链接的情况 UserInfo userInfo = UserModel.get().getCacheLoginUserInfo(); if (userInfo != null) { - handleLinkedJump(); + handleLinkedJump(this); if (userInfo.isShowLimitCharge() && PmDialogShowMrg.get().isHasShow() && DemoCache.readNewUserChargeGift() == 1) { @@ -685,7 +685,7 @@ public class MainActivity extends BaseMvpActivity private void handleChannelPageInfo() { if (handleSplashJump()) return; - if (handleLinkedJump()) return; + if (handleLinkedJump(this)) return; //渠道落地页和邀请码跳转只需要完善资料后处理一次 String spKey = KEY_FLAG_VALID_CHANNEL_PAGE + AuthModel.get().getCurrentUid(); @@ -776,7 +776,7 @@ public class MainActivity extends BaseMvpActivity /** * @return true 如果处理了跳转 */ - public boolean handleLinkedJump() { + public static boolean handleLinkedJump(Context context) { LinkedInfo linkedInfo = LinkedModel.get().getLinkedInfo(); LinkedModel.get().setLinkedInfo(null); @@ -786,9 +786,9 @@ public class MainActivity extends BaseMvpActivity LogUtil.print(ResUtil.getString(R.string.yizhuan_erban_mainactivity_01)); // 跳转 if (!StringUtil.isEmpty(linkedInfo.getRoomUid()) && linkedInfo.getType().equals("2")) { - AVRoomActivity.start(this, Long.parseLong(linkedInfo.getRoomUid())); + AVRoomActivity.start(context, Long.parseLong(linkedInfo.getRoomUid())); } else if (!StringUtil.isEmpty(linkedInfo.getFamilyId()) && linkedInfo.getType().equals("4")) { - FamilyHomeActivity.start(this, linkedInfo.getFamilyId()); + FamilyHomeActivity.start(context, linkedInfo.getFamilyId()); } else if (!TextUtils.isEmpty(linkedInfo.getUrl()) && linkedInfo.getType().equals("3")) { CommonWebViewActivity.start(context, UriProvider.getLinkUrl(linkedInfo.getUrl())); } else if (!TextUtils.isEmpty(linkedInfo.getWorldId()) && linkedInfo.getType().equals("5")) { diff --git a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java index 0737431ca..6dd0db6b9 100644 --- a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java +++ b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java @@ -4,6 +4,7 @@ import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUS import android.annotation.SuppressLint; import android.annotation.TargetApi; +import android.app.Activity; import android.app.Application; import android.content.Context; import android.graphics.Color; @@ -20,6 +21,9 @@ import com.bumptech.glide.request.target.ViewTarget; import com.coorchice.library.utils.LogUtils; import com.hjq.toast.ToastUtils; import com.mob.MobSDK; +import com.mob.moblink.MobLink; +import com.mob.moblink.RestoreSceneListener; +import com.mob.moblink.Scene; import com.netease.nim.uikit.api.NimUIKit; import com.netease.nim.uikit.common.util.log.LogUtil; import com.netease.nimlib.sdk.NIMClient; @@ -42,6 +46,7 @@ import com.tencent.bugly.crashreport.CrashReport; import com.tencent.vasdolly.helper.ChannelReaderUtil; import com.umeng.analytics.MobclickAgent; import com.umeng.commonsdk.UMConfigure; +import com.yizhuan.erban.AgentActivity; import com.yizhuan.erban.BuildConfig; import com.yizhuan.erban.NimMiddleActivity; import com.yizhuan.erban.R; @@ -239,6 +244,7 @@ public class XChatApplication extends Application { }); GsonConverterPlugins.lockdown(); + //fixed: Glide Exception:"You must not call setTag() on a view Glide is targeting" ViewTarget.setTagId(R.id.tag_glide); @@ -278,9 +284,25 @@ public class XChatApplication extends Application { * 初始化linkedMe */ private static void initLinkedMe() { + MobSDK.init(instance, "36b91eeac7469", "63ec0702513aca17e20615dd5dfdc03f"); + MobLink.setRestoreSceneListener(new RestoreSceneListener() { + @Override + public Class willRestoreScene(Scene scene) { + return AgentActivity.class; + } + @Override + public void completeRestore(Scene scene) { + } + + @Override + public void notFoundScene(Scene scene) { + } + }); } + + private static void initEnv() { //首先初始化环境 Env.initEnv(BuildConfig.BUILD_TYPE, BuildConfig.DEBUG); diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java index 9c9cbf7a9..af7dcf539 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/HomePartyFragment.java @@ -573,7 +573,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe .flatMap(userInfo -> ShareModel.get().shareRoom( platform, currentRoomInfo.getUid(), - userInfo.getErbanNo(), currentRoomInfo.getTitle(), currentRoomInfo.getAvatar() )) diff --git a/app/src/main/java/com/yizhuan/erban/other/activity/SplashActivity.java b/app/src/main/java/com/yizhuan/erban/other/activity/SplashActivity.java index 307586faa..aeecbe175 100644 --- a/app/src/main/java/com/yizhuan/erban/other/activity/SplashActivity.java +++ b/app/src/main/java/com/yizhuan/erban/other/activity/SplashActivity.java @@ -1,6 +1,7 @@ package com.yizhuan.erban.other.activity; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; @@ -41,6 +42,11 @@ public class SplashActivity extends AppCompatActivity implements View.OnClickLis private volatile boolean needJump = false; + public static void start(Context context) { + Intent starter = new Intent(context, SplashActivity.class); + context.startActivity(starter); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/share/IShareModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/share/IShareModel.java index 85133d481..f662bb10d 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/share/IShareModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/share/IShareModel.java @@ -4,6 +4,8 @@ import com.yizhuan.xchat_android_core.share.bean.ShareCommonInfo; import com.yizhuan.xchat_android_core.web.bean.WebJsBeanInfo; import com.yizhuan.xchat_android_library.coremanager.IBaseCore; +import java.util.Map; + import cn.sharesdk.framework.Platform; import io.reactivex.Single; @@ -17,7 +19,7 @@ public interface IShareModel extends IBaseCore { Single shareH5(WebJsBeanInfo.DataBean webViewInfo, Platform platform, boolean httpsUrl); - Single shareRoom(Platform platform, long roomUid, long roomId, String title, String roomAvatar); + Single shareRoom(Platform platform, long roomUid, String title, String avatar); Single shareFamily(Platform platform, String familyId, diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/share/ShareModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/share/ShareModel.java index 538874e3c..f730d1460 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/share/ShareModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/share/ShareModel.java @@ -23,7 +23,6 @@ import com.yizhuan.xchat_android_library.net.rxnet.RxNet; import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; -import java.net.URLEncoder; import java.util.HashMap; import cn.sharesdk.facebook.Facebook; @@ -46,25 +45,15 @@ import retrofit2.http.Query; public class ShareModel extends BaseModel implements IShareModel { - private interface MSG { - String success = ResUtil.getString(R.string.xchat_android_core_share_sharemodel_01); - String failed = ResUtil.getString(R.string.xchat_android_core_share_sharemodel_02); - String cancel = ResUtil.getString(R.string.xchat_android_core_share_sharemodel_03); - } - private final Api api = RxNet.create(Api.class); - private static final class Helper { - public static final ShareModel INSTANCE = new ShareModel(); + private ShareModel() { } public static ShareModel get() { return Helper.INSTANCE; } - private ShareModel() { - } - @Override public Single shareH5(final WebJsBeanInfo.DataBean webViewInfo, Platform platform) { return shareH5(webViewInfo, platform, false); @@ -138,64 +127,69 @@ public class ShareModel extends BaseModel implements IShareModel { } + /** + * 分享房间 + * + * @param platform 平台 + * @param roomUid 房间id + * @param title 标题 + */ @Override - public Single shareRoom(Platform platform, - final long roomUid, - long roomId, - String title, String room_avatar) { + public Single shareRoom(Platform platform, final long roomUid, String title, String avatar) { return Single.create(new SingleOnSubscribe() { - @SuppressLint("CheckResult") @Override public void subscribe(SingleEmitter emitter) throws Exception { - UserModel.get().getUserInfo(roomUid).subscribe(userInfo -> { - //无UI API - if (userInfo != null && platform != null) { - Platform.ShareParams sp = new Platform.ShareParams(); - sp.setText(XChatConstants.SHARE_ROOM_TEXT); - sp.setTitle(XChatConstants.SHARE_ROOM_TITLE); - sp.setImageUrl(userInfo.getAvatar()); - final String siteUrl = UriProvider.IM_SERVER_URL + XChatConstants.SHARE_ROOM_URL + - AuthModel.get().getCurrentUid() + "&uid=" + roomUid + "&room_name=" + - URLEncoder.encode(title, "utf8") + "&room_id=" + roomId + "&room_avatar=" + - URLEncoder.encode(room_avatar, "utf8") + "&share_name=" + - URLEncoder.encode( UserModel.get().getCacheLoginUserInfo().getNick(), "utf8"); - //QQ空间分享 + //无UI API + if (platform != null) { - sp.setSite(XChatConstants.SHARE_ROOM_TEXT); - sp.setSiteUrl(siteUrl); - //QQ分享 - sp.setTitleUrl(siteUrl); - //微信朋友圈分享 + Platform.ShareParams sp = new Platform.ShareParams(); + sp.setImageUrl(avatar); + + String tmpSiteUrl = UriProvider.IM_SERVER_URL + XChatConstants.SHARE_ROOM_URL + AuthModel.get().getCurrentUid() + "&uid=" + roomUid + "&ROOM_UID=" + roomUid; + + final String siteUrl = tmpSiteUrl; + + + //facebook + if (platform.getName().equals(Facebook.NAME)) { + sp.setTitle(XChatConstants.SHARE_ROOM_TITLE); + sp.setText(XChatConstants.SHARE_ROOM_TEXT); sp.setUrl(siteUrl); sp.setShareType(Platform.SHARE_WEBPAGE); - platform.setPlatformActionListener(new PlatformActionListener() { - @Override - public void onComplete(Platform platform1, int i, HashMap hashMap) { - sendShareRoomTipMsg(roomUid); - String shareUrl = siteUrl; - reportShare(String.valueOf(roomUid), 1, platform1, shareUrl); - emitter.onSuccess(MSG.success); - } - - @Override - public void onError(Platform platform1, int i, Throwable throwable) { - emitter.onError(new Throwable(MSG.failed)); - } - - @Override - public void onCancel(Platform platform1, int i) { - emitter.onError(new Throwable(MSG.cancel)); - } - }); - platform.share(sp); } - }); + //line + else if (platform.getName().equals(Line.NAME)) { + sp.setText(XChatConstants.SHARE_ROOM_TEXT + "[" + siteUrl + "]"); + } + + platform.setPlatformActionListener(new PlatformActionListener() { + @Override + public void onComplete(Platform platform, int i, HashMap hashMap) { + sendShareRoomTipMsg(roomUid); + reportShare(String.valueOf(roomUid), 1, platform, siteUrl); + emitter.onSuccess(MSG.success); + } + + @Override + public void onError(Platform platform, int i, Throwable throwable) { + String errorMsg = MSG.failed; + if (throwable.getMessage().contains("not installed")) { + errorMsg = ResUtil.getString(R.string.not_install_app); + } + emitter.onError(new Throwable(errorMsg)); + } + + @Override + public void onCancel(Platform platform, int i) { + emitter.onError(new Throwable(MSG.cancel)); + } + }); + platform.share(sp); + } } }); - } - /** * 向我们服务器报告分享 * @@ -215,13 +209,13 @@ public class ShareModel extends BaseModel implements IShareModel { } api.getShareRedPacket( - String.valueOf(AuthModel.get().getCurrentUid()), - roomUid, - String.valueOf(shareType), - sharePageId + "", - shareUrl, - AuthModel.get().getTicket() - ) + String.valueOf(AuthModel.get().getCurrentUid()), + roomUid, + String.valueOf(shareType), + sharePageId + "", + shareUrl, + AuthModel.get().getTicket() + ) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(); @@ -322,7 +316,6 @@ public class ShareModel extends BaseModel implements IShareModel { } - @Override public Single shareText(Platform platform, String text) { return Single.create(emitter -> { @@ -448,42 +441,41 @@ public class ShareModel extends BaseModel implements IShareModel { } - @Override public Single shareCommon(Platform platform, ShareCommonInfo info, boolean toast) { return Single.create((SingleOnSubscribe) emitter -> { - Platform.ShareParams sp = new Platform.ShareParams(); - sp.setTitle(info.getTitle()); - sp.setText(info.getContent()); - sp.setImageUrl(info.getImageUrl()); - String siteUrl = info.getSiteUrl(); - //QQ空间分享 - sp.setSite(info.getTitle()); - sp.setSiteUrl(siteUrl); - //QQ分享 - sp.setTitleUrl(siteUrl); - //微信朋友圈分享 - sp.setUrl(siteUrl); - sp.setShareType(Platform.SHARE_WEBPAGE); - platform.setPlatformActionListener(new PlatformActionListener() { - @Override - public void onComplete(Platform platform1, int i, HashMap hashMap) { - emitter.onSuccess(MSG.success); - } + Platform.ShareParams sp = new Platform.ShareParams(); + sp.setTitle(info.getTitle()); + sp.setText(info.getContent()); + sp.setImageUrl(info.getImageUrl()); + String siteUrl = info.getSiteUrl(); + //QQ空间分享 + sp.setSite(info.getTitle()); + sp.setSiteUrl(siteUrl); + //QQ分享 + sp.setTitleUrl(siteUrl); + //微信朋友圈分享 + sp.setUrl(siteUrl); + sp.setShareType(Platform.SHARE_WEBPAGE); + platform.setPlatformActionListener(new PlatformActionListener() { + @Override + public void onComplete(Platform platform1, int i, HashMap hashMap) { + emitter.onSuccess(MSG.success); + } - @Override - public void onError(Platform platform1, int i, Throwable throwable) { - emitter.onError(new Throwable(MSG.failed)); - } + @Override + public void onError(Platform platform1, int i, Throwable throwable) { + emitter.onError(new Throwable(MSG.failed)); + } - @Override - public void onCancel(Platform platform1, int i) { - emitter.onError(new Throwable(MSG.cancel)); - } - }); - platform.share(sp); - }) + @Override + public void onCancel(Platform platform1, int i) { + emitter.onError(new Throwable(MSG.cancel)); + } + }); + platform.share(sp); + }) .doOnSuccess(s -> { if (toast) { SingleToastUtil.showToast(s); @@ -496,6 +488,13 @@ public class ShareModel extends BaseModel implements IShareModel { }); } + private interface MSG { + String success = ResUtil.getString(R.string.xchat_android_core_share_sharemodel_01); + String failed = ResUtil.getString(R.string.xchat_android_core_share_sharemodel_02); + String cancel = ResUtil.getString(R.string.xchat_android_core_share_sharemodel_03); + } + + interface Api { /** @@ -518,4 +517,8 @@ public class ShareModel extends BaseModel implements IShareModel { @Query("ticket") String ticket); } + private static final class Helper { + public static final ShareModel INSTANCE = new ShareModel(); + } + } diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index e282baaa9..56a2fea29 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -661,4 +661,7 @@ 正在下載中... 下載中... 已是最新版本 + 未安裝該應用 + HABU-Making new friends,join HABU right now. + Find and join the best groups,talk with strangers diff --git a/mob.gradle b/mob.gradle index 84bf04e50..121206484 100644 --- a/mob.gradle +++ b/mob.gradle @@ -4,7 +4,10 @@ MobSDK { appKey "36b91eeac7469" appSecret "63ec0702513aca17e20615dd5dfdc03f" appBundleMode true - + MobLink { + uriScheme "pekoapp://sharesdk" + appLinkHost "cebg.t4m.cn" + } ShareSDK { //平台配置信息 gui false