接入MobLink

This commit is contained in:
huangjian
2022-10-19 16:39:34 +08:00
parent 989853b4e4
commit b846e3765e
9 changed files with 242 additions and 104 deletions

View File

@@ -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<String, Object> 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<ActivityManager.AppTask> taskInfoList = am.getAppTasks();
for (ActivityManager.AppTask taskInfo : taskInfoList) {
if (taskInfo.getTaskInfo().baseActivity.equals(cmpName)) {
flag = true;
break;
}
}
} else {
List<ActivityManager.RunningTaskInfo> taskInfoList = am.getRunningTasks(10);
for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
if (taskInfo.baseActivity.equals(cmpName)) {
flag = true;
break;
}
}
}
}
return flag;
} catch (Throwable e) {
return false;
}
}
}

View File

@@ -300,7 +300,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
//这里是为了处理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<IMainView, MainPresenter>
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<IMainView, MainPresenter>
/**
* @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<IMainView, MainPresenter>
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")) {

View File

@@ -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<? extends Activity> 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);

View File

@@ -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()
))

View File

@@ -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);

View File

@@ -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<String> shareH5(WebJsBeanInfo.DataBean webViewInfo, Platform platform, boolean httpsUrl);
Single<String> shareRoom(Platform platform, long roomUid, long roomId, String title, String roomAvatar);
Single<String> shareRoom(Platform platform, long roomUid, String title, String avatar);
Single<String> shareFamily(Platform platform,
String familyId,

View File

@@ -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<String> 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<String> shareRoom(Platform platform,
final long roomUid,
long roomId,
String title, String room_avatar) {
public Single<String> shareRoom(Platform platform, final long roomUid, String title, String avatar) {
return Single.create(new SingleOnSubscribe<String>() {
@SuppressLint("CheckResult")
@Override
public void subscribe(SingleEmitter<String> 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<String, Object> 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<String, Object> 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<String> shareText(Platform platform, String text) {
return Single.create(emitter -> {
@@ -448,42 +441,41 @@ public class ShareModel extends BaseModel implements IShareModel {
}
@Override
public Single<String> shareCommon(Platform platform, ShareCommonInfo info, boolean toast) {
return Single.create((SingleOnSubscribe<String>) 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<String, Object> 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<String, Object> 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();
}
}

View File

@@ -661,4 +661,7 @@
<string name="upgrade_model_upgrademodel_05">正在下載中...</string>
<string name="upgrade_model_upgrademodel_06">下載中...</string>
<string name="upgrade_model_upgrademodel_07">已是最新版本</string>
<string name="not_install_app">未安裝該應用</string>
<string name="wechat_share_title">HABU-Making new friends,join HABU right now. </string>
<string name="wechat_share_content">Find and join the best groups,talk with strangers</string>
</resources>

View File

@@ -4,7 +4,10 @@ MobSDK {
appKey "36b91eeac7469"
appSecret "63ec0702513aca17e20615dd5dfdc03f"
appBundleMode true
MobLink {
uriScheme "pekoapp://sharesdk"
appLinkHost "cebg.t4m.cn"
}
ShareSDK {
//平台配置信息
gui false