<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Cocos Creator微信登錄接入(完全小白教程)(安卓篇)

      1:創(chuàng)建 Creator項(xiàng)目,如下

      ?

       

      2.創(chuàng)建完成后,項(xiàng)目工程圖如下

      ?

       

      3.assets目錄創(chuàng)建Login場景,創(chuàng)建TS目錄,創(chuàng)建TSSDKTool.ts,Login.ts,如下圖

      ?

      4. TSSDKTool.ts腳本內(nèi)容如下:

      export class TSSDKTool {
          public static isAndroid = cc.sys.isNative && cc.sys.os === cc.sys.OS_ANDROID
          public static isIOS = cc.sys.isNative && cc.sys.os === cc.sys.OS_IOS
      
          /**
           * 調(diào)取native微信授權(quán)
          */
          public static wxLogin() {
              console.log("wxLogin");
              if (this.isAndroid) {
                  //調(diào)用Java代碼進(jìn)行微信登錄
                  jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "weixin_login", "(Ljava/lang/String;)V","weixin_login");
              }
          }
      
          /**
           * 接收native微信授權(quán)的code
           * @param errCode 
           */
          public static wxLoginResult(errCode) {
              console.log("wxLoginResultcode=" + errCode)
              if (this.isAndroid) {
      
              }
          }
      }
      cc["TSSDKTool"] = TSSDKTool;

       

      5.Login.ts腳本內(nèi)容如下:

      // Learn TypeScript:
      //  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/typescript.html
      //  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/typescript.html
      // Learn Attribute:
      //  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/reference/attributes.html
      //  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/reference/attributes.html
      // Learn life-cycle callbacks:
      //  - [Chinese] https://docs.cocos.com/creator/manual/zh/scripting/life-cycle-callbacks.html
      //  - [English] http://www.cocos2d-x.org/docs/creator/manual/en/scripting/life-cycle-callbacks.html
      
      import { TSSDKTool } from "./TSSDKTool";
      const {ccclass, property} = cc._decorator;
      
      @ccclass
      export default class NewClass extends cc.Component {
      
          @property(cc.Label)
          label: cc.Label = null;
      
          @property
          text: string = 'hello';
      
          // LIFE-CYCLE CALLBACKS:
      
          onLoginWX(){
              TSSDKTool.wxLogin();
          }
      
          // onLoad () {}
      
          start () {
      
          }
      
          // update (dt) {}
      }

       

      6.Creator編輯中將Login.ts與微信登錄按鈕綁定,如下圖:

      ???

      7.構(gòu)建項(xiàng)目(構(gòu)建為Android項(xiàng)目)

      7-1、Creator編輯器菜單欄->項(xiàng)目->構(gòu)建發(fā)布...

      7-2、相關(guān)設(shè)置如下圖

      ?

      備注:選項(xiàng)3中的包名需與微信開發(fā)平臺申請的包名一致

      執(zhí)行構(gòu)建,

      7-3、構(gòu)建完成

      備注:構(gòu)建完成后,不要關(guān)閉窗口,最后還要來編繹

      ?

      7-4、構(gòu)建完成后的項(xiàng)目位置

      ?

       

      8、使用Android Studio打開項(xiàng)目

      ?

      備注:后面的目錄,文件,代碼操作都在選項(xiàng)5目錄中操作

       

      9、打開build.gradle配置,翻最下面,添加微信配置:

      implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

      如圖:

      ?

       

      10、編輯src\AndroidManifest.xml文件,添加代碼

      <!--微信授權(quán)登陸-->
              <activity
                  android:name= ".wxapi.WXEntryActivity"
                  android:label="@string/app_name"
                  android:launchMode="singleTask"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.Translucent"
                  android:exported="true" />

       

      完整內(nèi)容如下

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.jh.bygs.fish"
          android:installLocation="auto">
      
          <uses-feature android:glEsVersion="0x00020000" />
      
          <uses-permission android:name="android.permission.INTERNET"/>
          <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
          <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
      
          <application
              android:allowBackup="true"
              android:label="@string/app_name"
              android:icon="@mipmap/ic_launcher">
              
              <!-- Tell Cocos2dxActivity the name of our .so -->
              <meta-data android:name="android.app.lib_name"
                         android:value="cocos2djs" />
              
              <activity
                  android:name="org.cocos2dx.javascript.AppActivity"
                  android:screenOrientation="sensorLandscape"
                  android:configChanges="orientation|keyboardHidden|screenSize"
                  android:label="@string/app_name"
                  android:usesCleartextTraffic="true"
                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                  android:launchMode="singleTask"
                  android:taskAffinity="" >
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
      
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
              <!--微信授權(quán)登陸-->
              <activity
                  android:name= ".wxapi.WXEntryActivity"
                  android:label="@string/app_name"
                  android:launchMode="singleTask"
                  android:screenOrientation="portrait"
                  android:theme="@android:style/Theme.Translucent"
                  android:exported="true" />
          </application>
          
      </manifest>

       

      11、進(jìn)入目錄proj.android-studio\app\src\,準(zhǔn)備創(chuàng)建微信API目錄,舉例你的包名為a.b.c.d,哪么就在src目錄創(chuàng)建a\b\c\d\wxapi

      備注:這里很不能錯,錯了微信回調(diào)就會失敗,創(chuàng)建的目錄必須與你在微信開發(fā)平臺申請使用的包名一致。

       

      12、wxapi目錄(見步驟11)創(chuàng)建WXEntryActivity.java(必須是這個文件名)文件,文件內(nèi)容如下:

      備注:文件內(nèi)容的第一行,修改為你的包名

      package 您的包名.wxapi;
      import android.app.Activity;
      
      import android.os.Bundle;
      
      import android.os.Message;
      
      import android.widget.Toast;
      
      import com.tencent.mm.opensdk.modelbase.BaseReq;
      
      import com.tencent.mm.opensdk.modelbase.BaseResp;
      
      import com.tencent.mm.opensdk.modelmsg.SendAuth;
      
      import com.tencent.mm.opensdk.openapi.IWXAPI;
      
      import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
      
      import org.cocos2dx.javascript.AppActivity;
      import android.util.Log;
      
      import java.util.ArrayList;
      
      public class WXEntryActivity extends Activity implements IWXAPIEventHandler
      {
          public static int ReqState = -1;// 0為登錄, 1為分享
          // private IWXAPIAPI;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              Log.e("tt","wxEntryActivity onCreate");
              // 這句話很關(guān)鍵
              try {
                  AppActivity.wx_api.handleIntent(getIntent(), this);
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          @Override
          public void onReq(BaseReq baseReq) {
              System.out.println("Enter the onResp");
          }
      
          // 向微信發(fā)送的請求的響應(yīng)信息回調(diào)該方法
          // @Override
          public void onResp(BaseResp baseResp)
          {
              System.out.println("Enter the onResp");
              if(baseResp.errCode == BaseResp.ErrCode.ERR_OK){
      //            String code = ((SendAuth Resp) baseResp).code;
                  String code = ((SendAuth.Resp) baseResp).code;
                  System.out.println("==========code is ===========" + code);
                  AppActivity.callJsFunction(code);
                  finish();
              }
          }
      }

       

      13、進(jìn)入目錄app\src\org\cocos2dx\javascript,修改AppActivity.java文件,文件內(nèi)容如下

      備注1:第44行代碼導(dǎo)入的包頭修改為你的包名

      備注2:第53行代碼,將appid設(shè)置為微信開發(fā)申請的appid

      /****************************************************************************
      Copyright (c) 2015-2016 Chukong Technologies Inc.
      Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
       
      http://www.cocos2d-x.org
      
      Permission is hereby granted, free of charge, to any person obtaining a copy
      of this software and associated documentation files (the "Software"), to deal
      in the Software without restriction, including without limitation the rights
      to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      copies of the Software, and to permit persons to whom the Software is
      furnished to do so, subject to the following conditions:
      
      The above copyright notice and this permission notice shall be included in
      all copies or substantial portions of the Software.
      
      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      THE SOFTWARE.
      ****************************************************************************/
      package org.cocos2dx.javascript;
      //新增代碼
      import android.util.Log;
      
      import org.cocos2dx.lib.Cocos2dxActivity;
      import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
      //新增代碼
      import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;
      
      import android.os.Bundle;
      
      import android.content.Intent;
      import android.content.res.Configuration;
      
      //新增代碼
      import com.tencent.mm.opensdk.modelmsg.SendAuth;
      //新增代碼
      import com.tencent.mm.opensdk.openapi.IWXAPI;
      //新增代碼
      import com.tencent.mm.opensdk.openapi.WXAPIFactory;
      //新增代碼
      import static org.cocos2dx.lib.Cocos2dxHelper.getActivity;
      
      //新增代碼
      import com.tencent.mm.opensdk.modelbase.BaseReq;
      //新增代碼
      import com.tencent.mm.opensdk.modelbase.BaseResp;
      //新增代碼
      import 您的包名.wxapi.WXEntryActivity;
      
      //新增代碼
      import java.util.Timer;
      //新增代碼
      import java.util.TimerTask;
      
      public class AppActivity extends Cocos2dxActivity {
      
          //新增代碼
          public static String wx_appid = "您的appid";
          public static IWXAPI wx_api;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              //新增代碼
              Log.e("tt","AppActivity onCreate");
              // Workaround in https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508
              if (!isTaskRoot()) {
                  // Android launched another instance of the root activity into an existing task
                  //  so just quietly finish and go away, dropping the user back into the activity
                  //  at the top of the stack (ie: the last state of this task)
                  // Don't need to finish it again since it's finished in super.onCreate .
                  return;
              }
              //新增代碼
              weixin_Init();
              // DO OTHER INITIALIZATION BELOW
              SDKWrapper.getInstance().init(this);
      
          }
      
          //新增代碼
          public static void weixin_Init() {
              wx_api = WXAPIFactory.createWXAPI(getActivity(),wx_appid,true);
              wx_api.registerApp(wx_appid);
          }
      
          //新增代碼
          public static void weixin_login(String data) {
              Log.e("tt","AppActivity weixin_login");
              SendAuth.Req req =new SendAuth.Req();
              req.scope ="snsapi_userinfo";
              req.state = data;
              System.out.println("req is " + req);
              //利用微信api發(fā)送請求
              wx_api.sendReq(req);
          }
      
          //新增代碼(回調(diào)函數(shù))
          public static void callJsFunction(final String value) {
              System.out.println("Enter the callJsFunction" + value);
              final String exes = "cc.TSSDKTool.wxLoginResult(\""+ value + "\")";
      
      //        app.runOnGLThread(new Runnable() {
      //            @Override
      //            public void run() {
      //                Cocos2dxJavascriptJavaBridge.evalString(exes);//直接調(diào)用到j(luò)s里面
      //            }
      //        });
      
              TimerTask task = new TimerTask(){
                  public void run(){
                      //execute the task
                      Cocos2dxGLSurfaceView.getInstance().queueEvent(new Runnable() {
                          @Override
                          public void run() {
                              System.out.println("chenggong  ==  "+ exes);
                              Cocos2dxJavascriptJavaBridge.evalString(exes);
                          }
                      });
                  }
              };
              Timer timer = new Timer();
              timer.schedule(task, 500);
          }
          
          @Override
          public Cocos2dxGLSurfaceView onCreateView() {
              Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
              // TestCpp should create stencil buffer
              glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
              SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView, this);
      
              return glSurfaceView;
          }
      
          @Override
          protected void onResume() {
              super.onResume();
              SDKWrapper.getInstance().onResume();
      
          }
      
          @Override
          protected void onPause() {
              super.onPause();
              SDKWrapper.getInstance().onPause();
      
          }
      
          @Override
          protected void onDestroy() {
              super.onDestroy();
              SDKWrapper.getInstance().onDestroy();
      
          }
      
          @Override
          protected void onActivityResult(int requestCode, int resultCode, Intent data) {
              super.onActivityResult(requestCode, resultCode, data);
              SDKWrapper.getInstance().onActivityResult(requestCode, resultCode, data);
          }
      
          @Override
          protected void onNewIntent(Intent intent) {
              super.onNewIntent(intent);
              SDKWrapper.getInstance().onNewIntent(intent);
          }
      
          @Override
          protected void onRestart() {
              super.onRestart();
              SDKWrapper.getInstance().onRestart();
          }
      
          @Override
          protected void onStop() {
              super.onStop();
              SDKWrapper.getInstance().onStop();
          }
              
          @Override
          public void onBackPressed() {
              SDKWrapper.getInstance().onBackPressed();
              super.onBackPressed();
          }
      
          @Override
          public void onConfigurationChanged(Configuration newConfig) {
              SDKWrapper.getInstance().onConfigurationChanged(newConfig);
              super.onConfigurationChanged(newConfig);
          }
      
          @Override
          protected void onRestoreInstanceState(Bundle savedInstanceState) {
              SDKWrapper.getInstance().onRestoreInstanceState(savedInstanceState);
              super.onRestoreInstanceState(savedInstanceState);
          }
      
          @Override
          protected void onSaveInstanceState(Bundle outState) {
              SDKWrapper.getInstance().onSaveInstanceState(outState);
              super.onSaveInstanceState(outState);
          }
      
          @Override
          protected void onStart() {
              SDKWrapper.getInstance().onStart();
              super.onStart();
          }
      }

       

      14、回到Creator編輯器,執(zhí)行編繹選項(xiàng)

      ?

       

      15、編繹結(jié)束后,生成的apk在目錄build\jsb-link\publish\android下。

      16、至此結(jié)束 。

       

      posted @ 2021-01-11 15:09  獨(dú)一無二~  閱讀(4094)  評論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产精品露脸视频观看| 国产成人精品亚洲精品密奴| 国内精品视频一区二区三区八戒| 崇州市| 国产短视频精品一区二区| 亚洲综合一区二区三区视频 | 国内揄拍国内精品少妇| 四虎在线成人免费观看| 亚洲AV无码破坏版在线观看| 国产成人不卡无码免费视频 | av在线播放国产一区| 日本一区二区三区有码视频| 男人的天堂av社区在线| 亚洲精品二区在线播放| 国产精品制服丝袜无码| a毛片免费在线观看| 国产激情一区二区三区在线| 酒店大战丝袜高跟鞋人妻| 久久精品一区二区日韩av| 欧美国产日产一区二区| 无码人妻精品一区二区三区下载| 无码国模国产在线观看免费| 亚洲 欧洲 无码 在线观看| 亚洲中文字幕有综合久久| 国内精品大秀视频日韩精品| 中文字幕精品无码一区二区| 合江县| 国产成人a在线观看视频免费| 性做久久久久久久| 果冻传媒董小宛视频| 九九色这里只有精品国产| 国产乱妇乱子视频在播放| 亚洲精品入口一区二区乱| 男人又大又硬又粗视频| 福利一区二区在线播放| 天天爽夜夜爽人人爽曰| 全免费A级毛片免费看无码| 99热精品国产三级在线观看| 久久er99热精品一区二区| 中文字幕在线精品人妻| 97久久久亚洲综合久久|