public void EndGame() { if (isGameOver) { return; } StopAllCoroutines(); isGameOver = true; var gd = GameData.instance; if (score > gd.bestScore) { isNewRecord = true; gd.bestScore = score; SocialPlatform.ReportScore(score, success => { if (!success) { PlayerPrefs.SetInt("UnreportedScore", score); PlayerPrefs.Save(); } }); } else { isNewRecord = false; } SocialPlatform.CheckAchievements(score); gd.coins += m_Coins; gd.gamesPlayed++; m_EventDispatcher.Invoke(EventId.EndGame); }
public void OnHomeClick() { Time.timeScale = 1.0f; var gd = GameData.instance; var score = GameController.instance.score; var coins = GameController.instance.coins; if (score > gd.bestScore) { gd.bestScore = score; SocialPlatform.ReportScore(score, success => { if (!success) { PlayerPrefs.SetInt("UnreportedScore", score); PlayerPrefs.Save(); } }); SocialPlatform.CheckAchievements(score); } gd.coins += coins; SceneManager.LoadScene(SceneManager.GetActiveScene() .buildIndex); }
/// <summary> /// 获取授权token相关授权信息 /// todo 扩展每个AppId独立的加密秘钥 /// </summary> /// <param name="newIdentity"></param> /// <param name="plat"></param> /// <returns></returns> private PortalTokenResp GeneratePortalToken(UserIdentity newIdentity, SocialPlatform plat) { var tenantId = CoreAppContext.Identity.tenant_id; var tokenStr = string.Concat(newIdentity.id, "|", tenantId, "|", (int)newIdentity.auth_type, "|", (int)plat, "|", NumHelper.RandomNum(6)); var token = CoreUserContext.GetToken(_portalTokenSecret, tokenStr); return(new PortalTokenResp { token = token, data = newIdentity }); }
/// <summary> /// 根据第三方信息处理登录或注册 /// (如果未绑定过系统账号,根据配置处理是否默认注册绑定 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <param name="authType"></param> /// <returns></returns> private async Task <PortalTokenResp> OauthRegLogin(SocialPlatform plat, string code, string state, PortalAuthorizeType authType) { // 先获取第三方账号最新信息,更新至本地 var oauthUserRes = await AddOrUpdateOauthUser(plat, code, state); if (!oauthUserRes.IsSuccess()) { return(new PortalTokenResp().WithResp(oauthUserRes)); // oauthUserRes.ConvertToResultInherit<PortalTokenResp>(); } // 【已绑定过的用户】 执行登录 var oauthUser = oauthUserRes.data; if (oauthUser.owner_uid > 0) { // 尝试直接登录 var userRes = await UserInfoRep.Instance.GetById(oauthUser.owner_uid); return(!userRes.IsSuccess() ? new PortalTokenResp().WithResp(userRes) : await LoginFinallyExecute(userRes.data, authType, false, plat)); } // 管理员只能通过第三方绑定信息登录,如果没有,登录失败 if (authType == PortalAuthorizeType.Admin) { return new PortalTokenResp() { ret = (int)RespTypes.ParaError, msg = "非管理员账号,登录失败!" } } ; // 【已绑定过的用户】 根据系统配置,检查是否默认绑定注册 var regConfig = GetOauthRegConfig(); if (regConfig.OauthRegisterType == OauthRegisterType.JustRegister) { return(await OauthReg(oauthUser)); } // 执行第三方临时授权,返回临时授权后通知前端,执行绑定相关操作 oauthUser.status = regConfig.OauthRegisterType == OauthRegisterType.Bind ? UserStatus.WaitOauthBind : UserStatus.WaitOauthChooseBind; var ide = InitialOauthTempIdentity(oauthUser, plat); PortalEvents.TriggerOauthTempLoginEvent(ide.data, AppReqContext.Identity, plat); return(GeneratePortalToken(ide.data, plat)); }
private void Start() { SocialPlatform.Activate(); Social.localUser.Authenticate(success => { if (success) { LoadScore(); } else { SceneManager.LoadScene("Main"); } }); }
/// <summary> /// 添加或更新第三方授权用户信息 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> private static async Task <Resp <OauthUserMo> > AddOrUpdateOauthUser(SocialPlatform plat, string code, string state) { var userWxRes = await GetOauthUserByCode(plat, code, state); if (!userWxRes.IsSuccess()) { return(new Resp <OauthUserMo>().WithResp(userWxRes)); } var userRes = await OauthUserRep.Instance.GetOauthUserByAppUserId(userWxRes.data.app_user_id, plat); if (userRes.IsSuccess()) { // 如果存在,更新已有信息 var user = userRes.data; user.SetInfoFromSocial(userWxRes.data); user.social_plat = plat; user.status = UserStatus.Normal; await OauthUserRep.Instance.UpdateUserWithToken(user); return(new Resp <OauthUserMo>(user)); } // 其他错误,直接返回 if (!userRes.IsRespType(RespTypes.ObjectNull)) { return(userRes); } // 如果是新授权用户,添加新的信息 var newUser = new OauthUserMo(); newUser.SetInfoFromSocial(userWxRes.data); var idRes = await OauthUserRep.Instance.Add(newUser); if (!idRes.IsSuccess()) { return(new Resp <OauthUserMo>().WithResp(idRes.ret, "添加授权用户信息失败!")); // idRes.ConvertToResult<OauthUserMo>(); } newUser.id = idRes.data; return(new Resp <OauthUserMo>(newUser)); }
public static OauthPlatform ToOauthPlat(this SocialPlatform oauthPlat) { switch (oauthPlat) { case SocialPlatform.WeChat: return(OauthPlatform.WeChat); case SocialPlatform.AliPay: return(OauthPlatform.AliPay); case SocialPlatform.Sina: return(OauthPlatform.Sina); case SocialPlatform.WeChatApp: return(OauthPlatform.WeChatApp); } throw new ArgumentException("正在获取一个未实现的Oauth平台接口!"); }
/// <summary> /// 系统用户主动绑定第三方平台 /// 【当前MemberContext信息为 系统用户信息(User or admin)】 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public async Task <Resp> OauthBind(SocialPlatform plat, string code, string state) { var oauthUserRes = await AddOrUpdateOauthUser(plat, code, state); if (!oauthUserRes.IsSuccess()) { return(oauthUserRes); } var identityRes = await GetMyself(); if (!identityRes.IsSuccess()) { return(identityRes); } return(await OauthUserRep.Instance.BindUserIdByOauthId(oauthUserRes.data.id, identityRes.data.id.ToInt64())); }
private void LoadScore() { var unreportedScore = 0; if (PlayerPrefs.HasKey("UnreportedScore")) { unreportedScore = PlayerPrefs.GetInt("UnreportedScore"); PlayerPrefs.DeleteKey("UnreportedScore"); PlayerPrefs.Save(); } SocialPlatform.LoadMyScore(score => { var prefsScore = GameData.instance.bestScore; var bestScore = Mathf.Max(unreportedScore, Mathf.Max(score, prefsScore)); GameData.instance.bestScore = bestScore; if (PlayerPrefs.GetInt("ReportAchievementFailed", 0) == 1) { PlayerPrefs.DeleteKey("ReportAchievementFailed"); PlayerPrefs.Save(); SocialPlatform.CheckAchievements(bestScore); } if (unreportedScore > score) { SocialPlatform.ReportScore(bestScore, success => { if (!success) { PlayerPrefs.SetInt("UnreportedScore", bestScore); PlayerPrefs.Save(); } SceneManager.LoadScene("Main"); }); } else { SceneManager.LoadScene("Main"); } }); }
/// <summary> /// 获取授权用户并更新信息 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> private static async Task <Resp <OauthUser> > GetOauthUserByCode(SocialPlatform plat, string code, string state) { var handler = GetOauthAdapter(plat); var tokenRes = await handler.GetOauthTokenAsync(code, state); if (!tokenRes.IsSuccess()) { return(new Resp <OauthUser>().WithResp(tokenRes)); // tokenRes.ConvertToResult<OauthUserMo>(); } var userWxRes = await handler.GetOauthUserAsync(tokenRes.data.access_token, tokenRes.data.app_user_id); if (!userWxRes.IsSuccess()) { return(new Resp <OauthUser>().WithResp(tokenRes)); // tokenRes.ConvertToResult<OauthUserMo>(); } userWxRes.data.SetTokenInfo(tokenRes.data); return(userWxRes); }
public void OnConnectClick() { if (Social.localUser.authenticated) { #if UNITY_ANDROID SocialPlatform.SignOut(); #endif OnLogInChanged(); } else { Social.localUser.Authenticate(success => { if (success) { OnLogInChanged(); } }); } }
private static Resp <UserIdentity> InitialUserIdentity(UserInfoBigMo user, SocialPlatform fromPlat) { user.pass_word = null; // 不可传出 var checkRes = CheckIdentityStatus(user.status); if (!checkRes.IsSuccess()) { return(new Resp <UserIdentity>().WithResp(checkRes)); } var identity = new UserIdentity { id = user.id.ToString(), name = user.nick_name ?? user.mobile ?? user.email, avatar = user.avatar, //from_plat = (int) fromPlat, auth_type = PortalAuthorizeType.User }; return(new Resp <UserIdentity>(identity)); }
private static Resp <UserIdentity> InitialAdminIdentity(AdminInfoMo admin, SocialPlatform fromPlat) { var checkRes = CheckIdentityStatus(admin.status); if (!checkRes.IsSuccess()) { return(new Resp <UserIdentity>().WithResp(checkRes)); } var identity = new UserIdentity { id = admin.u_id.ToString(), // 使用用户表的Id name = admin.admin_name, avatar = admin.avatar, //from_plat = (int) fromPlat, auth_type = admin.admin_type == AdminType.Supper ? PortalAuthorizeType.SuperAdmin : PortalAuthorizeType.Admin }; return(new Resp <UserIdentity>(identity)); }
/// <summary> /// 根据第三方用户编号获取本地授权信息 /// </summary> /// <param name="appUId"></param> /// <param name="plat"></param> /// <returns></returns> public async Task <Resp <OauthUserMo> > GetOauthUserByAppUserId(string appUId, SocialPlatform plat) { return(await Get(u => u.app_user_id == appUId && u.owner_tid == OwnerTId && u.social_plat == plat)); }
private async Task <PortalTokenResp> RegFinallyExecute(UserInfoBigMo user, PortalAuthorizeType authType, bool isFromBind = false, SocialPlatform plat = SocialPlatform.None) { var idRes = await UserInfoRep.Instance.Add(user); if (!idRes.IsSuccess()) { return(new PortalTokenResp().WithResp(idRes)); } if (isFromBind) { var bindRes = await BindTempOauthUserToUser(user.id); if (!bindRes.IsSuccess()) { return(new PortalTokenResp().WithResp(bindRes)); //bindRes; } plat = bindRes.data; } user.pass_word = null; var identity = new UserIdentity() { auth_type = authType, id = user.id.ToString(), name = user.nick_name, avatar = user.avatar }; PortalEvents.TriggerRegisterEvent(identity, plat, CoreAppContext.Identity); return(GeneratePortalToken(identity, plat)); ; }
public static void TriggerRegisterEvent(UserIdentity identity, SocialPlatform plat, AppIdentity app) { }
public static void TriggerLoginEvent(UserIdentity identity, AppIdentity app, SocialPlatform plat = SocialPlatform.None) { // todo 异步推送登录消息 //return Task.CompletedTask; // var authType = (PortalAuthorizeType)identity.AuthenticationType; }
public static void TriggerOauthTempLoginEvent(UserIdentity identity, AppIdentity app, SocialPlatform plat = SocialPlatform.None) { }
private static async Task <Resp <UserIdentity> > GetAuthIdentityById(long userId, PortalAuthorizeType authType, SocialPlatform fromPlat) { Resp <UserIdentity> identityRes; switch (authType) { case PortalAuthorizeType.Admin: case PortalAuthorizeType.SuperAdmin: var adminRes = await AdminInfoRep.Instance.GetAdminByUId(userId); if (!adminRes.IsSuccess()) { return(new Resp <UserIdentity>().WithResp(RespTypes.UserUnLogin, "用户未登录!")); } identityRes = InitialAdminIdentity(adminRes.data, fromPlat); break; case PortalAuthorizeType.User: var userRes = await UserInfoRep.Instance.GetById(userId); if (!userRes.IsSuccess()) { return(new Resp <UserIdentity>().WithResp(RespTypes.UserUnLogin, "用户未登录!")); } identityRes = InitialUserIdentity(userRes.data, fromPlat); break; default: identityRes = new Resp <UserIdentity>().WithResp(RespTypes.UserUnLogin, "用户未登录!"); break; } return(identityRes); }
private async Task <PortalTokenResp> LoginFinallyExecute(UserInfoBigMo user, PortalAuthorizeType authType, bool isFromThirdBind = false, SocialPlatform plat = SocialPlatform.None) { Resp <UserIdentity> identityRes; switch (authType) { case PortalAuthorizeType.Admin: // 登录时默认只有admin,不会出现 superAdmin var adminRes = await AdminInfoRep.Instance.GetAdminByUId(user.id); if (!adminRes.IsSuccess()) { return new PortalTokenResp() { ret = adminRes.ret, msg = "管理员账号/密码错误!" } } ; identityRes = InitialAdminIdentity(adminRes.data, plat); break; case PortalAuthorizeType.User: identityRes = InitialUserIdentity(user, plat); break; default: return(new PortalTokenResp(RespTypes.ParaError, "账号/密码错误!")); } if (!identityRes.IsSuccess()) { return(new PortalTokenResp().WithResp(identityRes)); } if (isFromThirdBind) { var bindRes = await BindTempOauthUserToUser(user.id); if (!bindRes.IsSuccess()) { return(new PortalTokenResp().WithResp(bindRes)); } plat = bindRes.data; } PortalEvents.TriggerLoginEvent(identityRes.data, CoreAppContext.Identity); return(GeneratePortalToken(identityRes.data, plat)); }
/// <summary> /// 获取oauth授权地址 /// </summary> /// <param name="plat"></param> /// <param name="redirectUrl"></param> /// <param name="state"></param> /// <param name="type"></param> /// <returns></returns> public Task <StrResp> GetOauthUrl(SocialPlatform plat, string redirectUrl, string state, OauthClientType type) { return(GetOauthAdapter(plat).GetOauthUrl(redirectUrl, state, type)); }
/// <summary> /// 通过第三方账号注册登录 /// 如果没有绑定过用户,会根据系统配置,决定是否直接创建默认账户. /// 根据返回的auth_type,前端决定是否进入手动绑定账户页面 /// </summary> /// <param name="plat"></param> /// <param name="code"></param> /// <param name="state"></param> /// <returns></returns> public Task <PortalTokenResp> OauthLogin(SocialPlatform plat, string code, string state) { return(OauthRegLogin(plat, code, state, PortalAuthorizeType.User)); }
private static IOauthAdapter GetOauthAdapter(SocialPlatform plat) { return(OauthAdapterHub.GetAdapter(plat.ToOauthPlat())); }
private static Resp <UserIdentity> InitialOauthTempIdentity(OauthUserMo oauthUser, SocialPlatform fromPlat) { var checkRes = CheckIdentityStatus(oauthUser.status); if (!checkRes.IsSuccess()) { return(new Resp <UserIdentity>().WithResp(checkRes)); } // 当前是临时第三方信息,【Id】是第三方授权表的oauthId // 此场景是给用户授权后选择是否绑定已有账户页面使用 var identity = new UserIdentity { id = oauthUser.id.ToString(), name = oauthUser.nick_name, avatar = oauthUser.head_img, //from_plat = (int) fromPlat, auth_type = PortalAuthorizeType.SocialAppUser, }; return(new Resp <UserIdentity>(identity)); }