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快速的集成出來, 拜拜!!!
相關文章
相關標籤/搜索