egret打包android + android微信登陆--小结

公司用egret作了款游戏,须要打android包,作安卓端的微信登陆,因而乎开始了第一安卓上的打包,正的是一脸懵android

首先遇到的问题有以下:

1. egret打安卓包时常常运行不起来, 主要是gradle版本和android版本的问题
2. 集成微信登陆流程不清晰, 如: 须要知道微信开放平台设置的包名, 须要生产keystore, 老是唤不起微信
3. http请求 401错误, 后来换了okhttpUtil
json

个人环境:

android studio 2.2.3, 安装简化教程也在 Egret项目打包成APK中有提到api

第一步是egret打包成安卓

能把app跑起来最重要,建议参考这位博主的文章 Egret项目打包成APK服务器

第二步是微信登陆

  1. 微信公众平台去注册你的app(其实这一步很重要)
    登陆 微信开放平台 把你的开发者信息填上,这些就不上图了,都是中文字,应该看得懂而后进入 管理中心 点击建立++移动应用++,注意: 应用的包名和签名不能随便填!!
    微信

  2. 第一步我不主讲, 博客上其余人写的很好, 图文并茂, 如android第三方登陆之微信登陆(图文详解)app

集成微信及其余第三方包

e8056748ab8a5204f80415976ab971c3.pnge8056748ab8a5204f80415976ab971c3.png

dependencies {    
    compile(name: 'egret', ext: 'aar')
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:5.3.1' 
    compile 'com.alibaba:fastjson:1.1.70.android'
    compile 'com.zhy:okhttputils:2.0.0'
 }

这里,没有像有的博客同样,添加libammsdk.jar的依赖包, 我都是gradle去下载的微信公众平台

project structure项目配置

4fc232cb23f49b8bc98fbd04fc301631.png4fc232cb23f49b8bc98fbd04fc301631.png
选择jdk路径(前提是下载jdk, 并安装配置)
479caabf57eab2f1d0bd02682c5f47cd.png479caabf57eab2f1d0bd02682c5f47cd.png
0a128b0da96e8ceeeea0f63fb1aa6b74.png0a128b0da96e8ceeeea0f63fb1aa6b74.pngide

设置keystore

将.keystore文件放到项目根目录, 同时设置app下的build.gradle
24443a1ce0cc3a9f5aa51f9fff647361.png24443a1ce0cc3a9f5aa51f9fff647361.pnggradle

项目结构

0517c072f993196c4c9f66d0af08e262.png0517c072f993196c4c9f66d0af08e262.png

入口文件MainActivity

  1. 添加一个 public IWXAPI mWxApi; 属性, 在MyApp类中添加一个静态属性 public static MainActivity sInstance = null;ui

  2. 在OnCreate方法中添加 MyApp.sInstance = this; regToWx(); 下面是regToWx()的方法体

private void regToWx() {
    // 经过WXAPIFactory工厂,获取IWXAPI的实例 
    mWxApi = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false); 
    // 将应用的appId注册到微信 
    mWxApi.registerApp(Constants.APP_ID); 
}

 

注: 常量类中的内容

public class Constants {    
    public static String APP_ID = "你的appid";    
    public static String SECRET = "对应的secret";
 }

微信文件WXEntryActivity

  1 import android.app.Activity;
  2 import android.content.Intent;
  3 import android.os.Bundle;
  4 import android.util.Log;
  5 import android.widget.Toast;
  6 
  7 import com.squareup.okhttp.Request;
  8 import com.tencent.mm.opensdk.constants.ConstantsAPI;
  9 import com.tencent.mm.opensdk.modelbase.BaseReq;
 10 import com.tencent.mm.opensdk.modelbase.BaseResp;
 11 import com.tencent.mm.opensdk.modelmsg.SendAuth;
 12 import com.tencent.mm.opensdk.openapi.IWXAPI;
 13 import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
 14 import com.tencent.mm.opensdk.openapi.WXAPIFactory;
 15 import com.zhy.http.okhttp.OkHttpUtils;
 16 import com.zhy.http.okhttp.callback.StringCallback;
 17 
 18 import org.json.JSONException;
 19 import org.json.JSONObject;
 20 
 21 /**
 22  * Created by Administrator on 2019/2/13.
 23  */public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
 24 
 25     private IWXAPI mWxApi;
 26 
 27     @Override
 28     public void onCreate(Bundle savedInstanceState) {
 29         super.onCreate(savedInstanceState);
 30 
 31         mWxApi = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
 32         try {
 33             boolean result = mWxApi.handleIntent(getIntent(), this);
 34             System.out.println("result: " + result);
 35 
 36         } catch (Exception e) {
 37             e.printStackTrace();
 38         }
 39 
 40         Log.d("WXEntryActivity","onCreate");
 41     }
 42 
 43     @Override
 44     protected void onNewIntent(Intent intent) {
 45         super.onNewIntent(intent);
 46 
 47         setIntent(intent);
 48         mWxApi.handleIntent(intent, this);
 49     }
 50 
 51     // 微信发送请求到第三方应用时,会回调到该方法
 52     @Override
 53     public void onReq(BaseReq req) {
 54         Log.i("WXEntryActivity", "onReq");
 55         switch (req.getType()) {
 56             case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
 57 
 58                 break;
 59             case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
 60 
 61                 break;
 62             default:
 63                 break;
 64         }
 65     }
 66 
 67     // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
 68     @Override
 69     public void onResp(BaseResp resp) {
 70         String result = "";
 71         Log.i("WXEntryActivity", "onResp");
 72 //        Toast.makeText(this, "baseresp.getType = " + resp.getType(), Toast.LENGTH_SHORT).show();
 73 
 74         switch (resp.errCode) {
 75             case BaseResp.ErrCode.ERR_OK:
 76                 result = "用户赞成";
 77                 if(resp instanceof SendAuth.Resp){
 78                     SendAuth.Resp newResp = (SendAuth.Resp)resp;
 79                     String code = newResp.code;
 80                     Log.i("WXEntryActivity","获取code: " + code);
 81 
 82                     // 2. 获取access_token
 83                     getAccessToken(code);
 84                 }
 85 
 86                 break;
 87             case BaseResp.ErrCode.ERR_USER_CANCEL:
 88                 result = "用户取消";
 89                 break;
 90             case BaseResp.ErrCode.ERR_AUTH_DENIED:
 91                 result = "用户拒绝受权";
 92                 break;
 93             case BaseResp.ErrCode.ERR_UNSUPPORT:
 94                 result = "暂不支持";
 95                 break;
 96             default:
 97                 result = "未知错误";
 98                 break;
 99         }
100 
101         Toast.makeText(this, result, Toast.LENGTH_LONG).show();
102         finish();
103     }
104 
105     /**
106      * 获取access_token
107      */
108     private void getAccessToken(String code) {
109         //获取受权
110         StringBuffer loginUrl = new StringBuffer();
111         loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
112                 .append("?appid=")
113                 .append(Constants.APP_ID)
114                 .append("&secret=")
115                 .append(Constants.SECRET)
116                 .append("&code=")
117                 .append(code)
118                 .append("&grant_type=authorization_code");
119 
120         OkHttpUtils.get()
121                 .url(loginUrl.toString())
122                 .build()
123                 .execute(new StringCallback() {
124                     @Override
125                     public void onError(Request request, Exception e) {
126 
127                     }
128 
129                     @Override
130                     public void onResponse(String response) {
131                         // 2. 获取access_token
132 
133                         JSONObject accessTokenObj = null;
134                         try {
135                             accessTokenObj = new JSONObject(response);
136                             Log.i("WXEntryActivity", "获取access_token:" + accessTokenObj.toString());
137                             if (accessTokenObj.getString("access_token") != null) {
138                                 getWxUserInfo(accessTokenObj.getString("access_token"), accessTokenObj.getString("openid"));
139 
140                             }
141                         } catch (JSONException e) {
142                             e.printStackTrace();
143                         }
144 
145                     }
146                 });
147 
148     }
149 
150     /**
151      * 3. 获取微信用户信息
152      * @return
153      */
154     private void getWxUserInfo(String access_token, String openid) {
155         StringBuffer url = new StringBuffer();
156         url.append("https://api.weixin.qq.com/sns/userinfo")
157                 .append("?access_token=")
158                 .append(access_token)
159                 .append("&openid=")
160                 .append(openid);
161 
162         OkHttpUtils.get()
163                 .url(url.toString())
164                 .build()
165                 .execute(new StringCallback() {
166                     @Override
167                     public void onError(Request request, Exception e) {
168 
169                     }
170 
171                     @Override
172                     public void onResponse(String response) {
173                         // todo,我这里是白鹭有游戏, 这里response里就是微信玩家信息, 能够打印一下
174                         // 发送给白鹭
175                         MyApp.sInstance.sendToJS(response);
176                     }
177                 });
178     }
179 }

 

将获取到的玩家信息, 发给服务器或者客户端, 作登陆/注册游戏

最后

配置和代码已经完结了,个人也能成功获取到微信玩家信息, 若是你的不能获取到的,最重要的仍是核实本身的包名, keystore, 我在这里吃了很大的亏,最后祝你们都能把android快速的集成出来, 拜拜!!!
相关文章
相关标签/搜索