>  기사  >  위챗 애플릿  >  WeChat에서 Html5 라이트 게임을 개발할 때의 몇 가지 함정을 공유하세요

WeChat에서 Html5 라이트 게임을 개발할 때의 몇 가지 함정을 공유하세요

高洛峰
高洛峰원래의
2017-02-13 13:06:061645검색

이 기간 동안 팀은 WeChat에서 일부 제품 디자인 및 개발을 수행해 왔으며 여기에는 물론 특정 운영 작업도 포함됩니다. 저는 소액 명함, 소액 티켓 수령, 소액 활동, 소액 모집 및 기타 소소한 사건을 포함하여 많은 일을 해왔습니다.

오늘 제가 이야기하고 싶은 것은 위챗에서 가장 활발한 라이트 게임인 마이크로 스크래치 경품입니다. 책, 티켓, 패키지를 긁을 수 있고 고객도 스크래치를 사용할 수 있습니다. 전화요금.

먼저 사진을 찍어서 구체적인 모습을 느껴보세요.

分享微信开发Html5轻游戏中的几个坑                                                                                 Html5 WebApp이 극복해야 할 몇 가지 함정: 分享微信开发Html5轻游戏中的几个坑

이 미니 게임의 기본 규칙 사용자는 하루에 2번의 스크래핑 횟수(무료로 한 번, 공유 후 한 번)로 제한되어 있으며 매일 경품을 긁을 수 있습니다.

이를 위해 우리가 구현하고자 하는 아이디어는 먼저 게임을 제한하는 것입니다. 구현 코드는 다음과 같습니다.

      if (!HttpContext.Current.Request.Browser.IsMobileDevice)
            {                
            var result = new RedirectResult("url", true);
                filterContext.Result = result;               
                 return;
            }            
            if (string.IsNullOrEmpty(HttpContext.Current.Request.UserAgent))
            {                
            var result = new RedirectResult("url", true);
                filterContext.Result = result;                
                return;
            }            
            if (HttpContext.Current.Request.UserAgent.IndexOf("MicroMessenger") == -1)
            {                
            var result = new RedirectResult("url", true);
                filterContext.Result = result;                
                return;
            }

이 트릭이 통과되었습니다. UserAgent의 판단 아이디어는 인터넷에서 많은 사람들이 사용하는 것 같지만 거기에 있습니다. 사용하지 않으면 여전히 함정이 많습니다:

1. 기본 문제: IOS 및 주류 Android 기기에서는 문제가 없지만 Windows Phone의 경우 WeChat을 직접 사용하면 됩니다. 뛰어내린 후 재생할 수 없습니다. . 그 이유는 WeChat의 기본 UserAgent가 MicroMessenger

이기 때문입니다. 이는 이러한 시스템의 WeChat 버전에는 존재하지 않으므로 Windows Phone의 문제를 해결하기 위해 다음 코드를 추가했습니다.

      var useragent = HttpContext.Current.Request.UserAgent.ToLower();            
      if (useragent.IndexOf("Windows Phone".ToLower()) != -1)
            {                
            base.OnActionExecuting(filterContext);                
            return;
            }

2. 고급 질문: 일부 전문가는 일부 플러그인 도구를 직접 사용하여 MicroMessenger의 UserAgent를 위조하므로 이론적으로는 가능한 모든 브라우저에서 재생할 수 있습니다. 웹 페이지를 엽니다(그룹 친구 @Abao's Selfless 덕분에). 이 문제를 해결하기 위해 우리는 WeChat SDK의 인터페이스를 사용합니다. 사용자가 WeChat에서 이를 사용할 때만 컨트롤 초기화 및 스크래치 작업이 수행됩니다. 그렇지 않으면 다른 터미널 탐색이 수행됩니다. 항상 로딩 상태에 있어야 합니다.

    dataForWeixin.callback = function () {            //一些初始化的操作
        }

WeChat의 인터페이스에 대해서는 원본 텍스트를 직접 읽어보시기 바랍니다. 여기에는 코드가 직접 게시되지 않습니다.

위의 아이디어로 많은 성과를 거두었지만 여전히 해결되지 않은 비즈니스 규칙에는 매우 치명적인 버그가 있습니다. 긍정적인 피드백을 주신 @冰milkteachildren의 신발에 감사드립니다.

이 버그는 사용자가 WeChat에서 쿠키와 캐시된 정보를 수동으로 삭제한 후 이벤트에 다시 입장하는 한 이론적으로 상금을 무제한으로 긁을 수 있다는 것입니다. 100% 상금을 받습니다. 이는 현재 위챗 사용자가 쿠키에 경품을 긁었는지 여부를 판단하는 기준을 내 규칙에 두었기 때문입니다. openid를 사용하고 싶지만 Moments에서 온 경우 WeChat 구독 계정은 openid를 얻을 수 없습니다. 여전히 항소 문제가 있습니다.

이 문제를 해결하기 위해 마침내 WeChat 서비스 계정의 인증 인터페이스를 빌려 아이디어를 찾았습니다. 기본 아이디어는 다음과 같습니다.

사용자가 페이지 로딩 = " 프로그램은 계정 번호의 다른 WeChat 서비스 승인 인터페이스를 호출하고 openid를 반환합니다 => openid를 쿠키에 저장합니다(존재하지 않거나 만료된 경우 이전 단계를 다시 실행합니다) => 이 활동이 쿠키에서 몇 번이나 스크랩되었는지 확인합니다. openid를 기반으로 하는 데이터베이스. 동시에 이 프로세스는 사용자가 WeChat에서 게임을 플레이할지 여부를 자동으로 결정합니다. 그렇지 않으면 콜백은 항상 로딩 상태에 있습니다. 사용 후 전체 과정은 비교적 원활합니다. 인증 관련 코드는 다음과 같습니다.

    #region 微信授权       
     public ActionResult WeixinLogin(string CurrentUrl)
        {            
        string url = WeixinOAuth2.Authorize(Server.UrlEncode(CurrentUrl));            
        return RedirectPermanent(url);
        }        
        public ActionResult WeixinCallback()
        {            
        if (!string.IsNullOrEmpty(Request["code"]))
            {                
            // 获取AccessToken参数
                var param = WeixinOAuth2.GetAccessToken(Request["code"]);                
                string url = string.Format("{0}#access_token={1}&openid={2}&expires_in={3}&state={4}", ConfigHelper.GetValue("Weixin_Callback"), param.access_token,param.openid,param.expires_in, Server.UrlDecode(Request.QueryString["state"]));                
                //重新跳转到回调页面,保持腾讯登录相同风格
                return Redirect(url);
            }            
            return View();
        }
    /// <summary>
        /// 授权请求页面        
        /// </summary>
        /// <param name="flag">0为获取微信基本信息 1为获取微信openid接口</param>
        /// <returns></returns>
        public static string Authorize(string ReturnUrl)
        {            
        string url=string.Format("http://www.php.cn/{0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect", Weixin_AppKey, Weixin_GetOpenIDCallback, ReturnUrl);            
        return url;
        }  
    #endregion

이 시점에서 WeChat에서 현재 사용자의 고유성을 어떻게 확인하는지에 대한 문제는 기본적으로 해결될 수 있습니다. 이 솔루션의 유일한 위험은 WeChat 인터페이스의 부드러움과 안정성입니다.

물론, 전체 개발 과정에서 하나씩 극복해야 할 문제가 많이 있습니다. 예를 들어 WeChat에서 공유한 후 콜백을 구현하는 것은 많은 친구들이 사용합니다. 이 작은 게임에는 grps를 지원해야 합니다. 이러한 대규모 게임 프레임워크에 액세스하는 것은 불가능합니다. 이를 수행하는 방법 등은 나중에 공유하기 위해 몇 가지 기사를 작성할 계획이므로 오늘은 먼저 휴식을 취하겠습니다. .

WeChat에서 Html5 라이트 게임을 개발할 때 발생할 수 있는 몇 가지 함정에 대해 더 자세히 공유하려면 PHP 중국어 웹사이트의 관련 기사에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.