Heim  >  Artikel  >  WeChat-Applet  >  Teilen Sie einige Fallstricke bei der Entwicklung von HTML5-Light-Spielen auf WeChat

Teilen Sie einige Fallstricke bei der Entwicklung von HTML5-Light-Spielen auf WeChat

高洛峰
高洛峰Original
2017-02-13 13:06:061652Durchsuche

Während dieser Zeit hat das Team einige Produktdesigns und -entwicklungen auf WeChat durchgeführt, was natürlich auch bestimmte operative Arbeiten umfasst. Ich habe eine Menge Dinge gemacht, darunter Mikro-Visitenkarten, Mikro-Ticketkauf, Mikro-Aktivitäten, Mikro-Rekrutierung und andere kleine Fälle.

Worüber ich heute sprechen möchte, ist das aktivste Light-Spiel, das wir in WeChat spielen – Mikro-Rubbelpreise. Dieses Ding kann zum Rubbeln von Büchern, Tickets und Paketen verwendet werden und wird auch von Kunden verwendet die Telefonrechnung.

Machen Sie zunächst das Bild, um ein Gefühl für das konkrete Erscheinungsbild zu bekommen:

分享微信开发Html5轻游戏中的几个坑                                                                   Einige Fallstricke, die Html5 WebApp überwinden muss: 分享微信开发Html5轻游戏中的几个坑

Die Grundregeln dieses Minispiels sind: Benutzer sind auf 2 Scraping-Zeiten pro Tag beschränkt (einmal kostenlos und noch einmal nach dem Teilen), und Sie können jeden Tag Preise scrapen

Zu diesem Zweck möchten wir die Idee umsetzen, zunächst das Spiel einzuschränken Nur für WeChat. Der Implementierungscode lautet wie folgt:

      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;
            }
Dies Die Idee, UserAgent zu verwenden, scheint von vielen Menschen verwendet zu werden das Internet, aber es gibt immer noch viele Fallstricke, wenn es nicht genutzt wird:

1 Grundproblem: IOS und Mainstream-Android-Geräte haben kein Problem, aber wenn es um Windows Phone geht, wird es direkt nicht möglich sein spielen, nachdem Sie WeChat verlassen haben. Der Grund dafür ist, dass der Standard-UserAgent in WeChat MicroMessenger

ist, der in der WeChat-Version dieser Maschinen nicht vorhanden ist. Um das Windows Phone-Problem zu lösen, haben wir den folgenden Code hinzugefügt:

      var useragent = HttpContext.Current.Request.UserAgent.ToLower();            
      if (useragent.IndexOf("Windows Phone".ToLower()) != -1)
            {                
            base.OnActionExecuting(filterContext);                
            return;
            }
2. Fortgeschrittene Frage: Einige Experten verwenden direkt einige Plug-in-Tools, um den UserAgent von MicroMessenger zu fälschen, sodass er theoretisch in jedem Browser abgespielt werden kann Das kann Webseiten öffnen (dank Gruppenfreund @阿 (Baos Selbstlosigkeit). Um dieses Problem zu lösen, verwenden wir die Schnittstelle im SDK von WeChat: Nur wenn der Benutzer sie in WeChat verwendet, werden die Steuerungsinitialisierung und der Scratch-Vorgang ausgeführt, andernfalls andere Das Terminal-Browsing befindet sich immer im Ladezustand.

    dataForWeixin.callback = function () {            //一些初始化的操作
        }
Bezüglich der WeChat-Schnittstelle lesen Sie bitte den Originaltext direkt hier, da er sonst nicht veröffentlicht wird .

Die obige Idee hat viel bewirkt, aber es gibt immer noch einen sehr schwerwiegenden Fehler in unseren Geschäftsregeln, der nicht behoben wurde. Vielen Dank auch für das positive Feedback von @冰milkteachildren's Shoes.

Dieser Fehler besteht darin, dass der Benutzer den Preis unbegrenzt oft freirubbeln kann, solange er die Cookies und zwischengespeicherten Informationen in WeChat manuell löscht und dann erneut an der Veranstaltung teilnimmt den Preis zu 100 % erhalten. Dies liegt daran, dass meine Regeln die Grundlage für die Beurteilung bilden, ob der aktuelle WeChat-Benutzer den Preis im Cookie gekratzt hat. Es scheint, dass es keinen anderen Weg gibt. Wir möchten openid verwenden, aber unser WeChat-Abonnementkonto kann openid nicht erhalten, wenn wir von Moments kommen. Es gibt immer noch ein Berufungsproblem.

Um dieses Problem zu lösen, haben wir endlich eine Idee gefunden, die Autorisierungsschnittstelle des WeChat-Dienstkontos auszuleihen. Die Grundidee ist wie folgt:

Der Benutzer betritt die Seite Loading = ". Das Programm ruft die Autorisierungsschnittstelle unseres anderen WeChat-Dienstes für die Kontonummer auf und gibt openid zurück => openid im Cookie speichern (wenn es nicht existiert oder abläuft, führen Sie die vorherigen Schritte erneut aus) => Bestimmen Sie, wie oft diese Aktivität aus dem gelöscht wurde Datenbank basierend auf openid Gleichzeitig bestimmt dieser Prozess automatisch, ob der Benutzer Spiele in WeChat spielen möchte, andernfalls befindet sich der Rückruf immer im Ladezustand. Der gesamte Vorgang verläuft nach der Verwendung relativ reibungslos. Hier ist der autorisierungsbezogene Code:

    #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
An diesem Punkt ist es grundsätzlich möglich, das Problem zu lösen, wie die Einzigartigkeit des Stroms bestimmt werden kann Benutzer in WeChat. Das einzige Risiko dieser Lösung besteht in der reibungslosen und stabilen Benutzeroberfläche von WeChat.

Natürlich gibt es viele andere Probleme, die während des gesamten Entwicklungsprozesses nach und nach überwunden werden müssen. Beispielsweise wird die Implementierung von Rückrufen nach dem Teilen auf WeChat von vielen Freunden verwendet Ich muss GRPS für dieses kleine Spiel unterstützen. Es ist unmöglich, auf diese großen Spiel-Frameworks zuzugreifen, wie man das macht usw. Ich habe vor, später einige Artikel zu schreiben, um diese zu teilen, also werde ich mich zuerst ausruhen .

Um mehr über verschiedene Fallstricke bei der Entwicklung von Html5-Light-Spielen auf WeChat zu erfahren, schauen Sie bitte auf der chinesischen PHP-Website nach verwandten Artikeln!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn