公司用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.gradle
gradle
添加一個 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快速的集成出來, 拜拜!!!