公司用egret作了款游戏,须要打android包,作安卓端的微信登陆,因而乎开始了第一安卓上的打包,正的是一脸懵
android
首先遇到的问题有以下:
1. egret打安卓包时常常运行不起来, 主要是gradle版本和android版本的问题
json
2. 集成微信登陆流程不清晰, 如: 须要知道微信开放平台设置的包名, 须要生产keystore, 老是唤不起微信
3. http请求 401错误, 后来换了okhttpUtil
个人环境:
android studio 2.2.3, 安装简化教程也在 Egret项目打包成APK中有提到
api
第一步是egret打包成安卓
能把app跑起来最重要,建议参考这位博主的文章 Egret项目打包成APK
服务器
第二步是微信登陆
微信公众平台去注册你的app(其实这一步很重要)
微信
登陆 微信开放平台 把你的开发者信息填上,这些就不上图了,都是中文字,应该看得懂而后进入 管理中心 点击建立++移动应用++,注意: 应用的包名和签名不能随便填!!
第一步我不主讲, 博客上其余人写的很好, 图文并茂, 如android第三方登陆之微信登陆(图文详解)
app
集成微信及其余第三方包
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去下载的微信公众平台
选择jdk路径(前提是下载jdk, 并安装配置)ide
将.keystore文件放到项目根目录, 同时设置app下的build.gradlegradle
添加一个 public IWXAPI mWxApi; 属性, 在MyApp类中添加一个静态属性 public static MainActivity sInstance = null;ui
在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"; }
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快速的集成出来, 拜拜!!!