From 8f0d723fba0f37b7a6b5d15baf8566bf6c474bde Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 12 Jan 2024 19:15:59 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=A7=BB=E9=99=A4=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E3=80=81QQ=E7=9B=B8=E5=85=B3=E7=9A=84=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=88=86=E4=BA=AB=E5=8A=9F=E8=83=BD=EF=BC=88=E8=BF=98?= =?UTF-8?q?=E6=9C=AA=E4=B8=8E=E6=8E=A5=E5=8F=A3=E8=81=94=E8=B0=83=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=89=20feat=EF=BC=9A=E6=96=B0=E5=A2=9Egoogle?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E3=80=81Line=E7=99=BB=E5=BD=95=E3=80=81Line?= =?UTF-8?q?=E5=88=86=E4=BA=AB=E3=80=81=E5=A4=8D=E5=88=B6=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=EF=BC=88=E8=BF=98=E6=9C=AA=E4=B8=8E=E6=8E=A5=E5=8F=A3=E8=81=94?= =?UTF-8?q?=E8=B0=83=E6=B5=8B=E8=AF=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/application/XChatApplication.java | 2 +- .../com/nnbc123/app/base/BaseLoginAct.java | 73 ----- .../app/ui/login/LoginCodeActivity.java | 3 + .../app/ui/login/LoginPasswordActivity.java | 3 + .../nnbc123/app/ui/widget/ShareDialog.java | 56 +--- .../res/drawable-xhdpi/ic_share_link.webp | Bin 0 -> 1330 bytes .../main/res/drawable-xhdpi/icon_line.webp | Bin 0 -> 1542 bytes app/src/main/res/layout/dialog_share.xml | 44 +-- app/src/main/res/values/strings.xml | 2 + .../app/quick_pass/QuickPassLoginAct.java | 78 ++++- .../java/com/nnbc123/core/auth/AuthModel.java | 266 +++++++++--------- .../com/nnbc123/core/auth/IAuthModel.java | 4 +- .../core/auth/entity/ThirdUserInfo.java | 4 + .../com/nnbc123/core/share/ShareModel.java | 185 +++++++----- .../protocol/StatisticsProtocol.java | 2 + core/src/main/res/values/strings.xml | 5 + .../library/utils/AppMetaDataUtil.java | 3 +- .../nnbc123/library/utils/DeviceUtils.java | 41 +++ .../com/nnbc123/library/common/Constants.java | 2 + .../com/nnbc123/library/common/SpConstants.kt | 4 + mob.gradle | 34 +-- tmpmob/assets/ShareSDK.xml | 6 +- 22 files changed, 430 insertions(+), 387 deletions(-) create mode 100644 app/src/main/res/drawable-xhdpi/ic_share_link.webp create mode 100644 app/src/main/res/drawable-xhdpi/icon_line.webp create mode 100644 library/src/main/java/com/nnbc123/library/utils/DeviceUtils.java diff --git a/app/src/main/java/com/nnbc123/app/application/XChatApplication.java b/app/src/main/java/com/nnbc123/app/application/XChatApplication.java index cf4c3477b..783ed5d83 100644 --- a/app/src/main/java/com/nnbc123/app/application/XChatApplication.java +++ b/app/src/main/java/com/nnbc123/app/application/XChatApplication.java @@ -212,7 +212,7 @@ public class XChatApplication extends BaseApp { String channel; channel = MetaDataUtils.INSTANCE.getStringData(Constants.CHANNEL_KEY, application); if (TextUtils.isEmpty(channel)) { - channel = "official"; + channel = com.nnbc123.library.common.Constants.CHANNEL_DEF; } Log.d("XChatApplication", "channel:" + channel); BasicConfig.INSTANCE.setOriginalChannel(channel); diff --git a/app/src/main/java/com/nnbc123/app/base/BaseLoginAct.java b/app/src/main/java/com/nnbc123/app/base/BaseLoginAct.java index 851e0fb80..819765647 100644 --- a/app/src/main/java/com/nnbc123/app/base/BaseLoginAct.java +++ b/app/src/main/java/com/nnbc123/app/base/BaseLoginAct.java @@ -17,12 +17,6 @@ import com.nnbc123.app.R; import com.nnbc123.app.common.widget.OriginalDrawStatusClickSpan; import com.nnbc123.app.ui.webview.CommonWebViewActivity; import com.nnbc123.core.UriProvider; -import com.nnbc123.core.auth.AuthModel; -import com.nnbc123.core.statistic.StatisticManager; -import com.nnbc123.core.statistic.protocol.StatisticsProtocol; - -import io.reactivex.SingleObserver; -import io.reactivex.disposables.Disposable; public abstract class BaseLoginAct extends BaseActivity { @@ -79,73 +73,6 @@ public abstract class BaseLoginAct extends BaseActivity { tvProtocol.setMovementMethod(new LinkMovementMethod()); } - protected void wxLogin() { - // 易盾保护 token -// String yiDunToken = watchman.getToken(XChatConstants.YI_DUN_BUSINESS_ID); - // 数美天网 deviceId -// String shuMeiDeviceId = SmAntiFraud.getDeviceId(); - getDialogManager().showProgressDialog(this, "请稍后"); - AuthModel.get() - .wxLogin("", "") - .subscribe(new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - mCompositeDisposable.add(d); - } - - @Override - public void onSuccess(String s) { - getDialogManager().dismissDialog(); - setResult(RESULT_OK); - finish(); - } - - @Override - public void onError(Throwable e) { - getDialogManager().dismissDialog(); - dealWithLoginError(e); - } - }); - StatisticManager.Instance().onEvent(this, - StatisticsProtocol.EVENT_LOGIN_WX_CLICK, "点击微信登录", null); - - } - - protected void qqLogin() { - // 易盾保护 token -// String yiDunToken = watchman.getToken(XChatConstants.YI_DUN_BUSINESS_ID); - // 数美天网 deviceId -// String shuMeiDeviceId = SmAntiFraud.getDeviceId(); - String yiDunToken = ""; - String shuMeiDeviceId = ""; - - getDialogManager().showProgressDialog(this, "请稍后"); - AuthModel.get() - .qqLogin(yiDunToken, shuMeiDeviceId) - .subscribe(new SingleObserver() { - @Override - public void onSubscribe(Disposable d) { - mCompositeDisposable.add(d); - } - - @Override - public void onSuccess(String s) { - getDialogManager().dismissDialog(); - setResult(RESULT_OK); - finish(); - } - - @Override - public void onError(Throwable e) { - getDialogManager().dismissDialog(); - dealWithLoginError(e); - } - }); - StatisticManager.Instance().onEvent(this, - StatisticsProtocol.EVENT_LOGIN_QQ_CLICK, "点击qq登录", null); - - } - public abstract void dealWithLoginError(Throwable e); @Override diff --git a/app/src/main/java/com/nnbc123/app/ui/login/LoginCodeActivity.java b/app/src/main/java/com/nnbc123/app/ui/login/LoginCodeActivity.java index adcc4a4dc..3208fd9fd 100644 --- a/app/src/main/java/com/nnbc123/app/ui/login/LoginCodeActivity.java +++ b/app/src/main/java/com/nnbc123/app/ui/login/LoginCodeActivity.java @@ -33,6 +33,8 @@ import com.nnbc123.core.auth.exception.IsSuperAdminException; import com.nnbc123.core.code.CodeType; import com.nnbc123.core.statistic.StatisticManager; import com.nnbc123.core.statistic.protocol.StatisticsProtocol; +import com.nnbc123.library.common.SpConstants; +import com.nnbc123.library.common.util.SPUtils; import com.nnbc123.library.utils.TextWatcherWrapper; import com.trello.rxlifecycle3.android.ActivityEvent; @@ -215,6 +217,7 @@ public class LoginCodeActivity extends BaseLoginAct { @Override public void onSuccess(String s) { + SPUtils.putString(SpConstants.LOGIN_TYPE, ""); getDialogManager().dismissDialog(); stopCountDownTimer(); setResult(RESULT_OK); diff --git a/app/src/main/java/com/nnbc123/app/ui/login/LoginPasswordActivity.java b/app/src/main/java/com/nnbc123/app/ui/login/LoginPasswordActivity.java index 8a00ed686..015c31d34 100644 --- a/app/src/main/java/com/nnbc123/app/ui/login/LoginPasswordActivity.java +++ b/app/src/main/java/com/nnbc123/app/ui/login/LoginPasswordActivity.java @@ -24,6 +24,8 @@ import com.nnbc123.core.auth.exception.BanAccountException; import com.nnbc123.core.auth.exception.IsSuperAdminException; import com.nnbc123.core.statistic.StatisticManager; import com.nnbc123.core.statistic.protocol.StatisticsProtocol; +import com.nnbc123.library.common.SpConstants; +import com.nnbc123.library.common.util.SPUtils; import com.nnbc123.library.utils.TextWatcherWrapper; import org.greenrobot.eventbus.EventBus; @@ -106,6 +108,7 @@ public class LoginPasswordActivity extends BaseLoginAct { @Override public void onSuccess(String s) { + SPUtils.putString(SpConstants.LOGIN_TYPE, ""); getDialogManager().dismissDialog(); setResult(RESULT_OK); finish(); diff --git a/app/src/main/java/com/nnbc123/app/ui/widget/ShareDialog.java b/app/src/main/java/com/nnbc123/app/ui/widget/ShareDialog.java index 304d9d267..989c6ba1c 100644 --- a/app/src/main/java/com/nnbc123/app/ui/widget/ShareDialog.java +++ b/app/src/main/java/com/nnbc123/app/ui/widget/ShareDialog.java @@ -12,14 +12,11 @@ import android.widget.TextView; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.nnbc123.app.R; -import com.nnbc123.library.utils.SingleToastUtil; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.ShareSDK; -import cn.sharesdk.tencent.qq.QQ; -import cn.sharesdk.tencent.qzone.QZone; -import cn.sharesdk.wechat.friends.Wechat; -import cn.sharesdk.wechat.moments.WechatMoments; +import cn.sharesdk.google.GooglePlus; +import cn.sharesdk.line.Line; /** * @author xiaoyu @@ -32,10 +29,8 @@ public class ShareDialog extends BottomSheetDialog implements View.OnClickListen public static final int TYPE_SHARE_H5 = 4; private final Context context; - private TextView tvWeixin; - private TextView tvWeixinpy; - private TextView tvQq; - private TextView tvQqZone; + private TextView tvLink; + private TextView tvLine; private TextView tvCancel; private static final String TAG = "ShareDialog"; private OnShareDialogItemClick onShareDialogItemClick; @@ -56,16 +51,12 @@ public class ShareDialog extends BottomSheetDialog implements View.OnClickListen super.onCreate(savedInstanceState); setContentView(R.layout.dialog_share); setCanceledOnTouchOutside(true); - tvWeixin = findViewById(R.id.tv_weixin); - tvWeixinpy = findViewById(R.id.tv_weixinpy); - tvQq = findViewById(R.id.tv_qq); - tvQqZone = findViewById(R.id.tv_qq_zone); + tvLine = findViewById(R.id.tv_line); + tvLink = findViewById(R.id.tv_share_link); tvCancel = findViewById(R.id.tv_cancel); - tvWeixin.setOnClickListener(this); - tvWeixinpy.setOnClickListener(this); - tvQq.setOnClickListener(this); - tvQqZone.setOnClickListener(this); + tvLine.setOnClickListener(this); + tvLink.setOnClickListener(this); tvCancel.setOnClickListener(this); FrameLayout bottomSheet = findViewById(R.id.design_bottom_sheet); if (bottomSheet != null) { @@ -90,38 +81,15 @@ public class ShareDialog extends BottomSheetDialog implements View.OnClickListen @Override public void onClick(View v) { switch (v.getId()) { - case R.id.tv_erban: + case R.id.tv_line: if (onShareDialogItemClick != null) { - if (type != TYPE_SHARE_H5) { - onShareDialogItemClick.onInAppSharingItemClick(); - } else { - SingleToastUtil.showToast("该内容不能分享给音萌好友"); - } + onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(Line.NAME)); } dismiss(); break; - - case R.id.tv_weixin: + case R.id.tv_share_link: if (onShareDialogItemClick != null) { - onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(Wechat.NAME)); - } - dismiss(); - break; - case R.id.tv_weixinpy: - if (onShareDialogItemClick != null) { - onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(WechatMoments.NAME)); - } - dismiss(); - break; - case R.id.tv_qq: - if (onShareDialogItemClick != null) { - onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(QQ.NAME)); - } - dismiss(); - break; - case R.id.tv_qq_zone: - if (onShareDialogItemClick != null) { - onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(QZone.NAME)); + onShareDialogItemClick.onSharePlatformClick(ShareSDK.getPlatform(GooglePlus.NAME)); } dismiss(); break; diff --git a/app/src/main/res/drawable-xhdpi/ic_share_link.webp b/app/src/main/res/drawable-xhdpi/ic_share_link.webp new file mode 100644 index 0000000000000000000000000000000000000000..548ce03429762be97861fd78f2028030ad5ba9d7 GIT binary patch literal 1330 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/dialog_share.xml b/app/src/main/res/layout/dialog_share.xml index 6f81aa9a9..fb00f83ff 100644 --- a/app/src/main/res/layout/dialog_share.xml +++ b/app/src/main/res/layout/dialog_share.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto" android:background="@drawable/bg_dialog_share" android:orientation="vertical"> @@ -34,60 +35,33 @@ android:weightSum="4"> + android:textSize="@dimen/font_medium" + app:drawableTopCompat="@drawable/icon_line" /> + android:textSize="@dimen/font_medium" + app:drawableTopCompat="@drawable/ic_share_link" /> - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 04513fdc3..32b36cce0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -531,6 +531,8 @@ 好友 微信好友 QQ好友 + Line + 复制链接 开启身份验证 关闭身份验证 diff --git a/app/src/module_quick_pass/java/com/nnbc123/app/quick_pass/QuickPassLoginAct.java b/app/src/module_quick_pass/java/com/nnbc123/app/quick_pass/QuickPassLoginAct.java index c7c5501a4..f9b77d24a 100644 --- a/app/src/module_quick_pass/java/com/nnbc123/app/quick_pass/QuickPassLoginAct.java +++ b/app/src/module_quick_pass/java/com/nnbc123/app/quick_pass/QuickPassLoginAct.java @@ -17,7 +17,6 @@ import com.netease.nim.uikit.StatusBarUtil; import com.nnbc123.app.R; import com.nnbc123.app.base.BaseLoginAct; import com.nnbc123.app.ui.login.LoginPasswordActivity; -import com.nnbc123.app.ui.login.LoginPhoneActivity; import com.nnbc123.core.DemoCache; import com.nnbc123.core.auth.AuthModel; import com.nnbc123.core.auth.event.LoginEvent; @@ -26,7 +25,12 @@ import com.nnbc123.core.auth.exception.BanAccountException; import com.nnbc123.core.auth.exception.IsSuperAdminException; import com.nnbc123.core.statistic.StatisticManager; import com.nnbc123.core.statistic.protocol.StatisticsProtocol; +import com.nnbc123.library.common.Constants; +import com.nnbc123.library.common.SpConstants; +import com.nnbc123.library.common.util.SPUtils; +import com.nnbc123.library.utils.AppMetaDataUtil; import com.nnbc123.library.utils.SingleToastUtil; +import com.trello.rxlifecycle3.android.ActivityEvent; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -37,6 +41,9 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import io.reactivex.SingleObserver; +import io.reactivex.disposables.Disposable; + public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListener { private static final String NEED_CHECKED_PROTOCOL = "need_checked_protocol"; @@ -64,6 +71,20 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe private void onFindViews() { tvProtocol = findViewById(R.id.tv_protocol); tvProtocolHint = findViewById(R.id.tv_protocol_hint); + if (AppMetaDataUtil.getChannelID().equals(Constants.CHANNEL_GOOGLE)) { + findViewById(R.id.cs_google).setVisibility(View.VISIBLE); + } else { + findViewById(R.id.cs_google).setVisibility(View.GONE); + } + String loginType = SPUtils.getString(SpConstants.LOGIN_TYPE, ""); + switch (loginType) { + case SpConstants.GOOGLE: + findViewById(R.id.tv_google_last_login).setVisibility(View.VISIBLE); + break; + case SpConstants.LINE: + findViewById(R.id.tv_line_last_login).setVisibility(View.VISIBLE); + break; + } setProtocol(); } @@ -99,10 +120,58 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe LoginPasswordActivity.start(QuickPassLoginAct.this); break; case R.id.cs_google: - SingleToastUtil.showToast("Google"); + StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_LOGIN_GOOGLE_CLICK); + getDialogManager().showProgressDialog(this); + AuthModel.get().googleLogin() + .compose(bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onSuccess(String result) { + getDialogManager().dismissDialog(); + SPUtils.putString(SpConstants.LOGIN_TYPE, SpConstants.GOOGLE); + setResult(RESULT_OK); + finish(); + } + + @Override + public void onError(Throwable e) { + getDialogManager().dismissDialog(); + dealWithLoginError(e); + e.printStackTrace(); + } + }); break; case R.id.cs_line: - SingleToastUtil.showToast("Line"); + StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_LOGIN_LINE_CLICK); + getDialogManager().showProgressDialog(this); + AuthModel.get().lineLogin() + .compose(bindUntilEvent(ActivityEvent.DESTROY)) + .subscribe(new SingleObserver() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onSuccess(String result) { + getDialogManager().dismissDialog(); + SPUtils.putString(SpConstants.LOGIN_TYPE, SpConstants.LINE); + setResult(RESULT_OK); + finish(); + } + + @Override + public void onError(Throwable e) { + getDialogManager().dismissDialog(); + dealWithLoginError(e); + e.printStackTrace(); + } + }); break; } } @@ -155,10 +224,8 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe spannableString, "我知道了", true, null); } else if (e instanceof IOException) { toast("网络异常,请检查您的网络再试~"); - LoginPhoneActivity.startForResult(QuickPassLoginAct.this, quickPassRequestCode); } else { toast(e.getMessage()); - LoginPhoneActivity.startForResult(QuickPassLoginAct.this, quickPassRequestCode); } } @@ -188,6 +255,7 @@ public class QuickPassLoginAct extends BaseLoginAct implements View.OnClickListe @Override protected void onDestroy() { super.onDestroy(); + getDialogManager().dismissDialog(); EventBus.getDefault().unregister(this); } diff --git a/core/src/main/java/com/nnbc123/core/auth/AuthModel.java b/core/src/main/java/com/nnbc123/core/auth/AuthModel.java index 2e55128a4..277be948a 100644 --- a/core/src/main/java/com/nnbc123/core/auth/AuthModel.java +++ b/core/src/main/java/com/nnbc123/core/auth/AuthModel.java @@ -2,6 +2,8 @@ package com.nnbc123.core.auth; import android.text.TextUtils; import android.util.Log; + +import com.nnbc123.core.R; import com.nnbc123.core.utils.LogUtils; import com.netease.nim.uikit.api.NimUIKit; import com.netease.nim.uikit.common.util.log.LogUtil; @@ -17,6 +19,8 @@ import com.netease.nimlib.sdk.auth.AuthServiceObserver; import com.netease.nimlib.sdk.auth.LoginInfo; import com.netease.nimlib.sdk.mixpush.MixPushService; import com.netease.nimlib.sdk.msg.MsgService; +import com.nnbc123.library.utils.DeviceUtils; +import com.nnbc123.library.utils.ResUtil; import com.orhanobut.logger.Logger; import com.nnbc123.core.DemoCache; import com.nnbc123.core.auth.entity.AccountInfo; @@ -58,8 +62,8 @@ import java.util.Map; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; -import cn.sharesdk.tencent.qq.QQ; -import cn.sharesdk.wechat.friends.Wechat; +import cn.sharesdk.google.GooglePlus; +import cn.sharesdk.line.Line; import io.reactivex.Single; import io.reactivex.SingleEmitter; import io.reactivex.SingleOnSubscribe; @@ -101,21 +105,13 @@ public class AuthModel extends BaseModel implements IAuthModel { */ public static final int CODE_BIG_HEAD_NUM = 25002; private static final String TAG = "AuthModel"; - /** - * 类型(1、手机号/耳伴号登陆,2、手机号/耳伴号登陆并绑定QQ) - */ - private static final int TYPE_LOGIN_NORMAL = 1; - private static final int TYPE_LOGIN_BIND_QQ = 2; - /** - * 校验验证码 - */ - private static final int CODE_SHOW_CODE = 107; /** * 超管登录校验验证码 */ private static final int SUPER_CODE_SHOW_CODE = 136; - private static final int TYPE_WECHAT_LOGIN = 1;//微信登录类型 - private static final int TYPE_QQ_LOGIN = 2;//QQ登录类型 + public static final int TYPE_GOOGLE_LOGIN = 8; + public static final int TYPE_LINE_LOGIN = 9; + public static final int TYPE_FACEBOOK_LOGIN = 10; private static volatile AuthModel instance = null; /** * 是否来源于登录 @@ -126,8 +122,6 @@ public class AuthModel extends BaseModel implements IAuthModel { private AccountInfo currentAccountInfo; private TicketInfo ticketInfo; private ThirdUserInfo thirdUserInfo; - private Platform wechat; - private Platform qq; /** * *************************************************** IM ************************************************************ */ @@ -299,142 +293,150 @@ public class AuthModel extends BaseModel implements IAuthModel { } /** - * 微信登录 + * line * * @return */ @Override - public Single wxLogin(String yiDunToken, String shuMeiDeviceId) { + public Single lineLogin() { return Single.create(new SingleOnSubscribe() { - // - @Override - public void subscribe(SingleEmitter e) throws Exception { - wechat = ShareSDK.getPlatform(Wechat.NAME); - if (wechat == null || !wechat.isClientValid()) { - e.onError(new Throwable("未安装微信")); - return; - } - if (wechat.isAuthValid()) { - wechat.removeAccount(true); - } - wechat.setPlatformActionListener(new PlatformActionListener() { - // @Override - public void onComplete(final Platform platform, int i, HashMap hashMap) { - if (i == Platform.ACTION_USER_INFOR) { - String openid = platform.getDb().getUserId(); - String unionid = platform.getDb().get("unionid"); - Logger.i("openid" + openid + "unionid" + unionid + platform.getDb().getUserIcon()); - thirdUserInfo = new ThirdUserInfo(); - thirdUserInfo.setPlatform("微信"); - thirdUserInfo.setType(ThirdUserInfo.TYPE_WX); - thirdUserInfo.setUserName(platform.getDb().getUserName()); - thirdUserInfo.setUserGender(platform.getDb().getUserGender()); - thirdUserInfo.setUserIcon(platform.getDb().getUserIcon()); - e.onSuccess(platform); + public void subscribe(SingleEmitter e) throws Exception { + Platform line = ShareSDK.getPlatform(Line.NAME); + //是否安装客户端 + if (!DeviceUtils.isAppInstalled(getContext(), "jp.naver.line.android")) { + e.onError(new Throwable(ResUtil.getString(R.string.core_auth_authmodel_06))); + return; } + if (line.isAuthValid()) { + line.removeAccount(true); + } + line.setPlatformActionListener(new PlatformActionListener() { + @Override + public void onComplete(Platform platform, int i, HashMap hashMap) { + if (i == Platform.ACTION_USER_INFOR) { + String openid = platform.getDb().getUserId(); + String unionid = platform.getDb().get("unionid"); + Logger.i("openid:" + openid + " unionid:" + unionid + platform.getDb().getUserIcon()); + + thirdUserInfo = new ThirdUserInfo(); + thirdUserInfo.setType(ThirdUserInfo.TYPE_LINE); + thirdUserInfo.setPlatform("LINE"); + thirdUserInfo.setUserName(platform.getDb().getUserName()); + thirdUserInfo.setUserGender(platform.getDb().getUserGender()); + thirdUserInfo.setUserIcon(platform.getDb().getUserIcon()); + e.onSuccess(platform); + } + } + + @Override + public void onError(Platform platform, int i, Throwable throwable) { + e.onError(new Throwable(ResUtil.getString(R.string.core_auth_authmodel_010) + i)); + throwable.printStackTrace(); + } + + @Override + public void onCancel(Platform platform, int i) { + e.onError(new Throwable(ResUtil.getString(R.string.core_auth_authmodel_011))); + } + }); + line.SSOSetting(false); + line.showUser(null); + } - @Override - public void onError(Platform platform, int i, Throwable throwable) { - e.onError(new Throwable("获取微信信息失败")); + }) + .flatMap(platform -> { + String openid = platform.getDb().getUserId(); + String unionid = platform.getDb().getUserId(); + String avatar = thirdUserInfo.getUserIcon(); + if (avatar != null && avatar.equals("null")) { + avatar = null; } - @Override - public void onCancel(Platform platform, int i) { - e.onError(new Throwable("微信登录取消")); + thirdUserInfo.setUserIcon(avatar); + String gender = thirdUserInfo.getUserGender(); + if (gender != null && !gender.trim().isEmpty()) { + gender = gender.replace("m", "1").replace("f", "2"); } - }); - wechat.SSOSetting(false); - wechat.showUser(null); - } - }).flatMap(new Function>() { - @Override - public SingleSource apply(Platform platform) throws Exception { - String openid = platform.getDb().getUserId(); - String unionid = platform.getDb().get("unionid"); - return thirdLogin(openid, unionid, TYPE_WECHAT_LOGIN, yiDunToken, shuMeiDeviceId); - } - }).flatMap(new Function>() { - @Override - public SingleSource apply(String s) throws Exception { - return imLogin(currentAccountInfo); - } - }).subscribeOn(AndroidSchedulers.mainThread()).observeOn(AndroidSchedulers.mainThread()).doOnSuccess(new Consumer() { - @Override - public void accept(String s) throws Exception { - //登录成功 - EventBus.getDefault().post(new LoginEvent()); - } - }); + thirdUserInfo.setUserGender(gender); + return thirdLogin(openid, unionid, TYPE_LINE_LOGIN, "", ""); + }) + .flatMap(s -> imLogin(currentAccountInfo)) + .subscribeOn(AndroidSchedulers.mainThread()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(RxHelper.handleException()) + .doOnSuccess(s -> EventBus.getDefault().post(new LoginEvent())); } - /** - * QQ登录 - * - * @return - */ @Override - public Single qqLogin(String yiDunToken, String shuMeiDeviceId) { + public Single googleLogin() { return Single.create(new SingleOnSubscribe() { - // - @Override - public void subscribe(SingleEmitter e) throws Exception { - qq = ShareSDK.getPlatform(QQ.NAME); - if (qq == null || !qq.isClientValid()) { - e.onError(new Throwable("未安装腾讯QQ或TIM")); - return; - } - if (qq.isAuthValid()) { - qq.removeAccount(true); - } - qq.setPlatformActionListener(new PlatformActionListener() { - // @Override - public void onComplete(Platform platform, int i, HashMap hashMap) { - if (i == Platform.ACTION_USER_INFOR) { - String openid = platform.getDb().getUserId(); - String unionid = platform.getDb().get("unionid"); - Logger.i("openid:" + openid + " unionid:" + unionid + platform.getDb().getUserIcon()); - thirdUserInfo = new ThirdUserInfo(); - thirdUserInfo.setType(ThirdUserInfo.TYPE_QQ); - thirdUserInfo.setUserName(platform.getDb().getUserName()); - thirdUserInfo.setUserGender(platform.getDb().getUserGender()); - thirdUserInfo.setUserIcon(platform.getDb().getUserIcon()); - e.onSuccess(platform); + public void subscribe(SingleEmitter e) throws Exception { + Platform google = ShareSDK.getPlatform(GooglePlus.NAME); + //是否安装客户端 + if (!DeviceUtils.isAppInstalled(getContext(), "com.android.vending")) { + e.onError(new Throwable(ResUtil.getString(R.string.core_auth_authmodel_09))); + return; } + //判断指定平台是否已经完成授权 + if (google.isAuthValid()) { + google.removeAccount(true); + } + google.setPlatformActionListener(new PlatformActionListener() { + @Override + public void onComplete(Platform platform, int i, HashMap hashMap) { + if (i == Platform.ACTION_USER_INFOR) { + String openid = platform.getDb().getUserId(); + String unionid = platform.getDb().get("unionid"); + Logger.i("openid:" + openid + " unionid:" + unionid + platform.getDb().getUserIcon()); + + thirdUserInfo = new ThirdUserInfo(); + thirdUserInfo.setType(ThirdUserInfo.TYPE_GOOGLE); + thirdUserInfo.setPlatform("Google"); + thirdUserInfo.setUserName(platform.getDb().getUserName()); + thirdUserInfo.setUserGender(platform.getDb().getUserGender()); + thirdUserInfo.setUserIcon(platform.getDb().getUserIcon()); + e.onSuccess(platform); + } + } + + @Override + public void onError(Platform platform, int i, Throwable throwable) { + throwable.printStackTrace(); + LogUtils.d("googleLogin" + i); + e.onError(new Throwable(ResUtil.getString(R.string.core_auth_authmodel_010) + i)); + } + + @Override + public void onCancel(Platform platform, int i) { + e.onError(new Throwable(ResUtil.getString(R.string.core_auth_authmodel_011))); + } + }); + google.SSOSetting(false); + google.showUser(null); + } - @Override - public void onError(Platform platform, int i, Throwable throwable) { - e.onError(new Throwable("获取QQ登录信息错误")); + }) + .flatMap(platform -> { + String openid = platform.getDb().getUserId(); + String unionid = platform.getDb().getUserId(); + String avatar = thirdUserInfo.getUserIcon(); + if (avatar != null && avatar.equals("null")) { + avatar = null; } - @Override - public void onCancel(Platform platform, int i) { - e.onError(new Throwable("QQ登录取消")); + thirdUserInfo.setUserIcon(avatar); + String gender = thirdUserInfo.getUserGender(); + if (gender != null && !gender.trim().isEmpty()) { + gender = gender.replace("m", "1").replace("f", "2"); } - }); - // - qq.SSOSetting(false); - qq.showUser(null); - } - }).flatMap(new Function>() { - @Override - public SingleSource apply(Platform platform) throws Exception { - String openid = platform.getDb().getUserId(); - String unionid = platform.getDb().get("unionid"); - return thirdLogin(openid, unionid, TYPE_QQ_LOGIN, yiDunToken, shuMeiDeviceId); - } - }).flatMap(new Function>() { - @Override - public SingleSource apply(String s) throws Exception { - return imLogin(currentAccountInfo); - } - }).subscribeOn(AndroidSchedulers.mainThread()).observeOn(AndroidSchedulers.mainThread()).doOnSuccess(new Consumer() { - @Override - public void accept(String s) throws Exception { - //登录成功 - EventBus.getDefault().post(new LoginEvent()); - } - }); - // + thirdUserInfo.setUserGender(gender); + return thirdLogin(openid, unionid, TYPE_GOOGLE_LOGIN, "", ""); + }) + .flatMap(s -> imLogin(currentAccountInfo)) + .subscribeOn(AndroidSchedulers.mainThread()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(RxHelper.handleException()) + .doOnSuccess(s -> EventBus.getDefault().post(new LoginEvent())); } /** diff --git a/core/src/main/java/com/nnbc123/core/auth/IAuthModel.java b/core/src/main/java/com/nnbc123/core/auth/IAuthModel.java index 3b2c0ce82..c91fe8fcb 100644 --- a/core/src/main/java/com/nnbc123/core/auth/IAuthModel.java +++ b/core/src/main/java/com/nnbc123/core/auth/IAuthModel.java @@ -49,9 +49,9 @@ public interface IAuthModel extends IModel{ */ Single login(String account, String password, String code, String yiDunToken, String shuMeiDeviceId); - Single wxLogin(String yiDunToken, String shuMeiDeviceId); + Single lineLogin(); - Single qqLogin(String yiDunToken, String shuMeiDeviceId); + Single googleLogin(); Single> isExistsQQAccount(String qqOpenid); diff --git a/core/src/main/java/com/nnbc123/core/auth/entity/ThirdUserInfo.java b/core/src/main/java/com/nnbc123/core/auth/entity/ThirdUserInfo.java index 60be699ca..8837600c1 100644 --- a/core/src/main/java/com/nnbc123/core/auth/entity/ThirdUserInfo.java +++ b/core/src/main/java/com/nnbc123/core/auth/entity/ThirdUserInfo.java @@ -18,6 +18,10 @@ public class ThirdUserInfo implements Serializable { public static final int TYPE_QQ = 2; public static final int TYPE_ONEKEY = 3; + public static final int TYPE_FACEBOOK = 1; + public static final int TYPE_LINE = 2; + public static final int TYPE_GOOGLE = 3; + public int getType() { return type; } diff --git a/core/src/main/java/com/nnbc123/core/share/ShareModel.java b/core/src/main/java/com/nnbc123/core/share/ShareModel.java index 158729bb0..6701149ca 100644 --- a/core/src/main/java/com/nnbc123/core/share/ShareModel.java +++ b/core/src/main/java/com/nnbc123/core/share/ShareModel.java @@ -1,9 +1,15 @@ package com.nnbc123.core.share; import android.annotation.SuppressLint; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder; import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage; +import com.nnbc123.core.R; +import com.nnbc123.library.common.util.Logger; +import com.nnbc123.library.utils.ResUtil; import com.nnbc123.xchat_android_constants.XChatConstants; import com.nnbc123.core.UriProvider; import com.nnbc123.core.auth.AuthModel; @@ -26,10 +32,8 @@ import java.util.HashMap; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; -import cn.sharesdk.tencent.qq.QQ; -import cn.sharesdk.tencent.qzone.QZone; -import cn.sharesdk.wechat.friends.Wechat; -import cn.sharesdk.wechat.moments.WechatMoments; +import cn.sharesdk.google.GooglePlus; +import cn.sharesdk.line.Line; import io.reactivex.Single; import io.reactivex.SingleEmitter; import io.reactivex.SingleOnSubscribe; @@ -65,14 +69,6 @@ public class ShareModel extends BaseModel implements IShareModel { @Override public void subscribe(SingleEmitter emitter) throws Exception { if (null != webViewInfo && platform != null) { - Platform.ShareParams sp = new Platform.ShareParams(); - sp.setText(webViewInfo.getDesc()); - sp.setTitle(webViewInfo.getTitle()); - if (httpsUrl) { - sp.setImageUrl(webViewInfo.getImgUrl().replace("http:", "https:")); - } else { - sp.setImageUrl(webViewInfo.getImgUrl()); - } String siteUrl = webViewInfo.getShowUrl(); String params = "shareUid=" + String.valueOf(AuthModel.get().getCurrentUid()); if (siteUrl.contains("?")) { @@ -84,14 +80,21 @@ public class ShareModel extends BaseModel implements IShareModel { } else { siteUrl += "?" + params; } - //QQ空间分享 - sp.setSite(webViewInfo.getDesc()); - sp.setSiteUrl(siteUrl); - //QQ分享 - sp.setTitleUrl(siteUrl); - //微信朋友圈分享 - sp.setUrl(siteUrl); - sp.setShareType(Platform.SHARE_WEBPAGE); + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(siteUrl, emitter); + return; + } + Platform.ShareParams sp = new Platform.ShareParams(); + sp.setText(webViewInfo.getDesc()); + sp.setTitle(webViewInfo.getTitle()); + if (httpsUrl) { + sp.setImageUrl(webViewInfo.getImgUrl().replace("http:", "https:")); + } else { + sp.setImageUrl(webViewInfo.getImgUrl()); + } + if (platform.getName().equals(Line.NAME)) { + sp.setText(webViewInfo.getDesc() + "[" + webViewInfo.getLink() + "]"); + } platform.setPlatformActionListener(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap hashMap) { @@ -112,7 +115,11 @@ public class ShareModel extends BaseModel implements IShareModel { @Override public void onError(Platform platform, int i, Throwable throwable) { - emitter.onError(new Throwable(MSG.failed)); + String errorMsg = MSG.failed; + if (throwable.getMessage().contains("not installed")) { + errorMsg = ResUtil.getString(R.string.not_install_app); + } + emitter.onError(new Throwable(errorMsg)); } @Override @@ -139,44 +146,46 @@ public class ShareModel extends BaseModel implements IShareModel { UserModel.get().getUserInfo(roomUid).subscribe(userInfo -> { //无UI API if (userInfo != null && platform != null) { - Platform.ShareParams sp = new Platform.ShareParams(); - sp.setText(title + XChatConstants.SHARE_ROOM_TEXT); - sp.setTitle(XChatConstants.SHARE_ROOM_TITLE); - sp.setImageUrl(userInfo.getAvatar()); final String siteUrl = UriProvider.WEB_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空间分享 - - sp.setSite(title + XChatConstants.SHARE_ROOM_TEXT); - 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) { - sendShareRoomTipMsg(roomUid); - String shareUrl = siteUrl; - reportShare(String.valueOf(roomUid), 1, platform1, shareUrl); - emitter.onSuccess(MSG.success); + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(siteUrl, emitter); + } else { + Platform.ShareParams sp = new Platform.ShareParams(); + sp.setText(title + XChatConstants.SHARE_ROOM_TEXT); + sp.setTitle(XChatConstants.SHARE_ROOM_TITLE); + sp.setImageUrl(userInfo.getAvatar()); + if (platform.getName().equals(Line.NAME)) { + sp.setText(XChatConstants.SHARE_ROOM_TEXT + "[" + siteUrl + "]"); } + 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 onError(Platform platform1, 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 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); + } } }); } @@ -194,17 +203,12 @@ public class ShareModel extends BaseModel implements IShareModel { */ private void reportShare(String roomUid, int sharePageId, Platform platform, String shareUrl) { int shareType = 0; - if (platform.getName().equals(Wechat.NAME)) { + if (platform.getName().equals(GooglePlus.NAME)) { shareType = 1; - } else if (platform.getName().equals(WechatMoments.NAME)) { + } else if (platform.getName().equals(Line.NAME)) { shareType = 2; - } else if (platform.getName().equals(QQ.NAME)) { - shareType = 3; - } else if (platform.getName().equals(QZone.NAME)) { - shareType = 4; } - api.getShareRedPacket( String.valueOf(AuthModel.get().getCurrentUid()), roomUid, @@ -229,14 +233,18 @@ public class ShareModel extends BaseModel implements IShareModel { public void subscribe(SingleEmitter emitter) throws Exception { //无UI API final String shareLink = UriProvider.WEB_URL + XChatConstants.SHARE_FAMILY_URL; + final String siteUrl = shareLink + "?shareUid=" + String.valueOf(AuthModel.get().getCurrentUid()) + + "&familyId=" + familyId; + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(siteUrl, emitter); + return; + } Platform.ShareParams sp = new Platform.ShareParams(); sp.setText(XChatConstants.SHARE_FAMILY_TEXT); sp.setTitle(XChatConstants.SHARE_FAMILY_TITLE + "“" + title + "”"); sp.setImageUrl(familyIcon); //QQ空间分享 sp.setSite(XChatConstants.SHARE_FAMILY_TEXT); - final String siteUrl = shareLink + "?shareUid=" + String.valueOf(AuthModel.get().getCurrentUid()) - + "&familyId=" + familyId; sp.setSiteUrl(siteUrl); //QQ分享 sp.setTitleUrl(siteUrl); @@ -274,14 +282,18 @@ public class ShareModel extends BaseModel implements IShareModel { public void subscribe(SingleEmitter emitter) throws Exception { //无UI API final String shareLink = UriProvider.WEB_URL + XChatConstants.SHARE_TEAM_URL; + final String siteUrl = shareLink + "?shareUid=" + String.valueOf(AuthModel.get().getCurrentUid()) + + "&familyId=" + familyId; + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(siteUrl, emitter); + return; + } Platform.ShareParams sp = new Platform.ShareParams(); sp.setText(XChatConstants.SHARE_TEAM_TEXT); sp.setTitle(XChatConstants.SHARE_TEAM_TITLE + "“" + title + "”"); sp.setImageUrl(teamIcon); //QQ空间分享 sp.setSite(XChatConstants.SHARE_TEAM_TEXT); - final String siteUrl = shareLink + "?shareUid=" + String.valueOf(AuthModel.get().getCurrentUid()) - + "&familyId=" + familyId; sp.setSiteUrl(siteUrl); //QQ分享 sp.setTitleUrl(siteUrl); @@ -316,6 +328,10 @@ public class ShareModel extends BaseModel implements IShareModel { @Override public Single shareText(Platform platform, String text) { return Single.create(emitter -> { + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(text, emitter); + return; + } Platform.ShareParams sp = new Platform.ShareParams(); sp.setTitle(""); sp.setText(text); @@ -376,6 +392,10 @@ public class ShareModel extends BaseModel implements IShareModel { } public void shareImage(Platform platform, String url) { + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(url, null); + return; + } //无UI API final String shareLink = UriProvider.WEB_URL + XChatConstants.SHARE_TEAM_URL; Platform.ShareParams sp = new Platform.ShareParams(); @@ -411,6 +431,10 @@ public class ShareModel extends BaseModel implements IShareModel { public Single shareImageForSignIn(Platform platform, String url) { return Single.create(emitter -> { + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(url, emitter); + return; + } Platform.ShareParams sp = new Platform.ShareParams(); sp.setImageUrl(url); @@ -442,19 +466,19 @@ public class ShareModel extends BaseModel implements IShareModel { public Single shareCommon(Platform platform, ShareCommonInfo info, boolean toast) { return Single.create((SingleOnSubscribe) emitter -> { + String siteUrl = info.getSiteUrl(); + if (platform.getName().equals(GooglePlus.NAME)) { + copyLink(siteUrl, emitter); + return; + } 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); + if (platform.getName().equals(Line.NAME)) { + sp.setText(info.getContent() + "[" + siteUrl + "]"); + } platform.setPlatformActionListener(new PlatformActionListener() { @Override public void onComplete(Platform platform1, int i, HashMap hashMap) { @@ -463,7 +487,11 @@ public class ShareModel extends BaseModel implements IShareModel { @Override public void onError(Platform platform1, int i, Throwable throwable) { - emitter.onError(new Throwable(MSG.failed)); + String errorMsg = MSG.failed; + if (throwable.getMessage().contains("not installed")) { + errorMsg = ResUtil.getString(R.string.not_install_app); + } + emitter.onError(new Throwable(errorMsg)); } @Override @@ -485,6 +513,21 @@ public class ShareModel extends BaseModel implements IShareModel { }); } + private void copyLink(String url, SingleEmitter emitter) { + try { + ClipboardManager cm = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); + cm.setPrimaryClip(ClipData.newPlainText("text", url)); + if (emitter != null) { + emitter.onSuccess("已复制"); + } + } catch (Exception e) { + Logger.info("copyText", String.valueOf(e)); + if (emitter != null) { + emitter.onError(new Throwable(String.valueOf(e))); + } + } + } + private interface MSG { String success = "分享成功"; String failed = "分享失败,请重试"; diff --git a/core/src/main/java/com/nnbc123/core/statistic/protocol/StatisticsProtocol.java b/core/src/main/java/com/nnbc123/core/statistic/protocol/StatisticsProtocol.java index ea0477164..c4c6666d3 100644 --- a/core/src/main/java/com/nnbc123/core/statistic/protocol/StatisticsProtocol.java +++ b/core/src/main/java/com/nnbc123/core/statistic/protocol/StatisticsProtocol.java @@ -16,6 +16,8 @@ public interface StatisticsProtocol { String EVENT_RECONNECTION_ROOM_CHAT = "String EVENT_reconnection_room_chat";//断网重连聊天室 String USER_KICKED_EVENT = "user_kicked_String EVENT";//用户被踢 + String EVENT_LOGIN_GOOGLE_CLICK = "login_google_click"; + String EVENT_LOGIN_LINE_CLICK = "login_line_click"; String EVENT_LOGIN_QQ_CLICK = "login_qq_click";//点击qq登录 String EVENT_LOGIN_WX_CLICK = "login_wx_click";//点击微信登录 String EVENT_LOGIN_PHONE_CLICK = "login_phone_click";//点击手机号登录 diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 6f8e4f608..a2507e555 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -1,3 +1,8 @@ core + 未安装Line + 未安装gmail + 登录出错 + 取消登录 + 未安装该应用 diff --git a/library/src/main/java/com/nnbc123/library/utils/AppMetaDataUtil.java b/library/src/main/java/com/nnbc123/library/utils/AppMetaDataUtil.java index 6d922f0d7..a35ea502e 100644 --- a/library/src/main/java/com/nnbc123/library/utils/AppMetaDataUtil.java +++ b/library/src/main/java/com/nnbc123/library/utils/AppMetaDataUtil.java @@ -5,6 +5,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.text.TextUtils; +import com.nnbc123.library.common.Constants; import com.nnbc123.library.utils.config.BasicConfig; import com.nnbc123.library.utils.log.MLog; @@ -26,7 +27,7 @@ public class AppMetaDataUtil { */ public static String getChannelID() { String channelID = BasicConfig.INSTANCE.getChannel(); - channelID = TextUtils.isEmpty(channelID) ? "official" : channelID; + channelID = TextUtils.isEmpty(channelID) ? Constants.CHANNEL_DEF : channelID; return channelID; } diff --git a/library/src/main/java/com/nnbc123/library/utils/DeviceUtils.java b/library/src/main/java/com/nnbc123/library/utils/DeviceUtils.java new file mode 100644 index 000000000..95846d868 --- /dev/null +++ b/library/src/main/java/com/nnbc123/library/utils/DeviceUtils.java @@ -0,0 +1,41 @@ +package com.nnbc123.library.utils; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; + +import com.orhanobut.logger.Logger; + +/** + * 设备信息工具类 + */ +public class DeviceUtils { + private static final String TAG = "DeviceUtils"; + + /** + * 检查指定包名的APP是否已安装了 + * + * @param context 上下文对象 + * @param packageName 包名 + * @return 是否有安装指定包名的APP,true代表已安装,false代表未安装 + */ + public static boolean isAppInstalled(Context context, String packageName) { + if (context == null) { + return false; + } else { + boolean installed = false; + try { + PackageManager pm = context.getPackageManager(); + ApplicationInfo info = pm.getApplicationInfo(packageName, 0); + if (info != null) { + installed = true; + } + } catch (Exception e) { + Logger.i("isAppInstalled packageName=" + packageName + " "+ e); + } + return installed; + } + } + +} + diff --git a/library/src/module_common/java/com/nnbc123/library/common/Constants.java b/library/src/module_common/java/com/nnbc123/library/common/Constants.java index 41d1153d4..e694df565 100644 --- a/library/src/module_common/java/com/nnbc123/library/common/Constants.java +++ b/library/src/module_common/java/com/nnbc123/library/common/Constants.java @@ -2,6 +2,8 @@ package com.nnbc123.library.common; public class Constants { + public static final String CHANNEL_DEF = "official"; + public static final String CHANNEL_GOOGLE = "google"; //上传的图片 默认大小不能超过大小 640KB public static final int UPLOAD_IMAGE_MAX_FILE_LENGTH = 640; //上传的图片 默认宽高最大值 2340 diff --git a/library/src/module_common/java/com/nnbc123/library/common/SpConstants.kt b/library/src/module_common/java/com/nnbc123/library/common/SpConstants.kt index 57f746069..eea2e589a 100644 --- a/library/src/module_common/java/com/nnbc123/library/common/SpConstants.kt +++ b/library/src/module_common/java/com/nnbc123/library/common/SpConstants.kt @@ -2,4 +2,8 @@ package com.nnbc123.library.common object SpConstants { const val ORDER_RECORD = "order_record" + const val LOGIN_TYPE = "login_type" + const val GOOGLE = "google" + const val FACEBOOK = "facebook" + const val LINE = "line" } \ No newline at end of file diff --git a/mob.gradle b/mob.gradle index 4ee7eba43..8e3637743 100644 --- a/mob.gradle +++ b/mob.gradle @@ -12,31 +12,27 @@ MobSDK { //平台配置信息 gui false devInfo { - Wechat { - appId "wx4b772d5ebc964a38" - appSecret "f045979c311e13725cbb9aa87c265668" - } - WechatMoments { - appId "wx4b772d5ebc964a38" - appSecret "f045979c311e13725cbb9aa87c265668" - } - QQ { - appId "102044928" - appKey "12u585rSsAHEzc4K" - shareByAppClient true - } - QZone { - appId "102044928" - appKey "12u585rSsAHEzc4K" - shareByAppClient true + GooglePlus { + appId "-.apps.googleusercontent.com" + callbackUri "http://localhost" + officialVersion "default" + enable true } + Line { + appId "16529" + appSecret "903d01" + enable true + } } } permissions { - exclude "android.permission.READ_PHONE_STATE", "android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.QUERY_ALL_PACKAGES" - } + exclude "android.permission.READ_PHONE_STATE", "android.permission.ACCESS_FINE_LOCATION", + "android.permission.ACCESS_COARSE_LOCATION", "android.permission.QUERY_ALL_PACKAGES", + "android.permission.GET_ACCOUNTS", "android.permission.ACCESS_WIFI_STATE", + "android.permission.READ_SMS", "android.permission.RECEIVE_SMS", + "android.permission.READ_CONTACTS"} } diff --git a/tmpmob/assets/ShareSDK.xml b/tmpmob/assets/ShareSDK.xml index b90da7196..2c2a960ab 100644 --- a/tmpmob/assets/ShareSDK.xml +++ b/tmpmob/assets/ShareSDK.xml @@ -1,7 +1,5 @@ - - - - + + \ No newline at end of file