网狐精华版,打包安卓,微信登录

 

精华版、安卓项目用eclipse打开

此时会遇到很多问题,项目全线标红

没做过安卓开发的同学看到这些红色的报错已经一个头俩个大了,

直接萌生退却的想法

其实这只是纸老虎。

所有的报错,都是jar路径引用不正确。在项目迁移的时候出现的问题。

这个时候必须要耐心的把所有的问题都解决掉,才能继续用eclipse二开。

告诉自己、不怕、我能行!

右键项目》属性》JavaBuildPath》Library 

打开后,拉到最底下,就能看到错误的根源

标红的jar包 路径不正确。

在这里我推荐个工具  :Everything(文件搜索工具)

pc上的文件秒搜,强大的一逼。

把项目中缺失的jar包,直接在工具里搜好,然后重新指定。刷新项目。就会发现少了很多错误。

然后还有个错误,找不到cocos2dx 相关的jar包

这个问题,网上搜很多的、就是把cocos2dx 里的android.project 里的src 文件下的copy 到咱们的安卓项目中就好了。

如果是个正常的项目的话,操作完上述步骤,基本就没报错 了,

就可以在这个基础上继续二开了。

还有个 就是Android.manifest.xml 中 有几个字段需要改下。

 

我做上面的改动的原因是我要自己对接微信官方的Sdk登录、

因为原项目中的用的友盟sdk、老实说、我每次安卓打包的微信登录、完全看运气、

找不出原因。于是心一横,干脆直接改了得了。

这是微信登录的回调处理,我直接贴出来吧

WXEntryActivity.java

package com.qiaoshuai.majiang2017.wxapi;

import java.util.HashMap;
import java.util.Map;

import org.cocos2dx.thirdparty.HttpRequest;
import org.cocos2dx.thirdparty.ThirdDefine;
import org.cocos2dx.thirdparty.ThirdParty;
import org.cocos2dx.thirdparty.ThirdParty.PLATFORM;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.os.Bundle;
import android.os.StrictMode;
import android.widget.Toast;

import com.tencent.mm.opensdk.constants.ConstantsAPI;
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 com.umeng.socialize.bean.SHARE_MEDIA;

import android.app.Activity;
import android.content.Intent;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
	private static final String TAG = "WXEntryActivity";
    private static final int RETURN_MSG_TYPE_LOGIN = 1; //登录
    private static final int RETURN_MSG_TYPE_SHARE = 2; //分享
    private Context mContext;

	// IWXAPI 是第三方app和微信通信的openapi接口
    private IWXAPI api;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // 通过WXAPIFactory工厂,获取IWXAPI的实例
    	api = ThirdParty.getInstance().myWXApi;  	
			
		//注意:
		//第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑
        try {
        	api.handleIntent(getIntent(), this);
        } catch (Exception e) {
        	e.printStackTrace();
        }
    }

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		
		setIntent(intent);
        api.handleIntent(intent, this);
	}

	// 微信发送请求到第三方应用时,会回调到该方法
	@Override
	public void onReq(BaseReq req) {
		switch (req.getType()) {
		case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
			break;
		case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
			break;
		default:
			break;
		}
	}

	// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
	@Override
	public void onResp(BaseResp resp) {
		int result = 0;
		
		Toast.makeText(this, "baseresp.getType = " + resp.getType(), 2);
		
		System.out.println("baseresp.getType = " + ((SendAuth.Resp) resp).code);
		getAccessToken(((SendAuth.Resp) resp).code);
		switch (resp.errCode) {
		case BaseResp.ErrCode.ERR_OK:
			Toast.makeText(this, "baseresp.11", 2);
			//result = R.string.errcode_success;
			break;
		case BaseResp.ErrCode.ERR_USER_CANCEL:
			Toast.makeText(this, "baseresp.22", 2);
			//result = R.string.errcode_cancel;
			break;
		case BaseResp.ErrCode.ERR_AUTH_DENIED:
			Toast.makeText(this, "baseresp.33", 2);
			//result = R.string.errcode_deny;
			break;
		case BaseResp.ErrCode.ERR_UNSUPPORT:
			Toast.makeText(this, "baseresp.44", 2);
			//result = R.string.errcode_unsupported;
			break;
		default:
			//result = R.string.errcode_unknown;
			break;
		}
		
	}
	
	/**
     * 获取access_token:
     *
     * @param code 用户或取access_token的code,仅在ErrCode为0时有效
     */
    private void getAccessToken(final String code) {
        Map<String, Object> params = new HashMap();
        params.put("appid", ThirdDefine.WeixinAppID);
        params.put("secret", ThirdDefine.WeixinAppSecret);
        params.put("code", code);
        params.put("grant_type", "authorization_code");
        
        //Token
        String URL = String.format("https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code",ThirdDefine.WeixinAppID,ThirdDefine.WeixinAppSecret,code);
        System.out.println(URL);
        URL = "https://api.weixin.qq.com/sns/oauth2/access_token?";
        String param = "appid="+ ThirdDefine.WeixinAppID +"&secret="+ThirdDefine.WeixinAppSecret+"&code="+code+"&grant_type=authorization_code";
        StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        String accessTokenResult = HttpRequest.sendPost(URL, param);
        this.SetToken(accessTokenResult);
        if(this.GetToken("errcode") != null){
        	System.out.print(this.GetToken("errcode"));
        }else{
        	System.out.print(this.GetToken("access_token"));
        }
        
        System.out.println(" ============================================start 1 =============================================================");
        //UserInfo
        URL = "https://api.weixin.qq.com/sns/userinfo?";
        param = "access_token="+ this.GetToken("access_token") +"&openid="+ThirdDefine.WeixinAppID;
        System.out.println(URL);
        System.out.println(param);
        String userInfoResult = HttpRequest.sendPost(URL, param);
        this.SetUserInfo(userInfoResult);
        
        
		final PLATFORM plat = ThirdParty.getInstance().getPlatformFrom(SHARE_MEDIA.WEIXIN);

		System.out.println("===============start 99  "+plat);
        if(this.GetUserInfo("errcode") != null){
        	System.out.print(this.GetUserInfo("errcode"));
	        System.out.println(" ============================================start 2222 =============================================================");
			JSONObject jObject = new JSONObject();
	        System.out.println(" ============================================start 1111 =============================================================");
			try 
			{
				jObject.put("valid", false);
				jObject.put("errorcode", GetUserInfo("errcode"));
    			ThirdParty.getInstance().myLoginListener.onLoginFail(plat, jObject.toString());
			} 
			catch (JSONException e) 
			{
		        System.out.println(" ============================================start 2 =============================================================");
    			ThirdParty.getInstance().myLoginListener.onLoginFail(plat, "");
				e.printStackTrace();
			}
        }else{
        		//鐧婚檰鎴愬姛                            	
            System.out.println(" ============================================start 3 =============================================================");
            JSONObject jObject = new JSONObject(userInfoMap);
            try 
            {
                System.out.println(" ============================================start 4 =============================================================");
        		jObject.put("valid", true);
        		jObject.put("um_code", userInfoMap);
        		ThirdParty.getInstance().myLoginListener.onLoginSuccess(plat,userInfoResult);
        	} 
            catch (JSONException e) 
        	{
        		ThirdParty.getInstance().myLoginListener.onLoginFail(plat, "");
        		e.printStackTrace();
        	}
        }
        //https://api.weixin.qq.com/sns/userinfo?access_token=14_0dncWe3pJt-hZASZ29IsN13e_TAEy9x6XckC700Gw42q1Uro0bkZMZ07-Rx-YEb2gVbJ8qj3hRxb9dZ0atAmHrFoXu3c4X_xLuHe-LT2DLM&openid=wx26f61c962ed021e3
        finish();
   }
    
    private Map<String,String> tokenMap = new HashMap();
    private Map<String,String> userInfoMap = new HashMap();
    
    private void SetToken(String str){
    	tokenMap = new HashMap();
        String strr = str.replace("{", "").replace("}", "");
        System.out.println(strr);
        String[] arrayTmp = strr.split(",");
        for(int i=0;i< arrayTmp.length;i++){
        	String key = arrayTmp[i].split(":")[0].replace("\"", ""); 
        	String value = arrayTmp[i].split(":")[1].replace("\"", "");
        	tokenMap.put(key, value);
        }
    }
    private String GetToken(String key){
    	System.out.println("获取:"+key);
    	System.out.println("长度:"+tokenMap.size());
        for (Map.Entry<String, String> entry : tokenMap.entrySet()) {
            System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());
        }
    	if(tokenMap.containsKey(key)){
    		return tokenMap.get(key);
    	}
    	return null;
    }
    
    private void SetUserInfo(String str){
    	userInfoMap = new HashMap();
        String strr = str.replace("{", "").replace("}", "");
        System.out.println(strr);
        String[] arrayTmp = strr.split(",");
        for(int i=0;i< arrayTmp.length;i++){
        	String key = arrayTmp[i].split(":")[0]; 
        	String value = arrayTmp[i].split(":")[1];
        	userInfoMap.put(key, value);
        }
    }
    private String GetUserInfo(String key){
    	System.out.println("获取:"+key);
    	System.out.println("长度:"+userInfoMap.size());
        for (Map.Entry<String, String> entry : userInfoMap.entrySet()) {
            System.out.println("Item : " + entry.getKey() + " Count : " + entry.getValue());
        }
    	if(userInfoMap.containsKey(key)){
    		return userInfoMap.get(key);
    	}
    	return null;
    }
    private String ChangeString(String str){
    	if(str == "nickname"){
    		str = "screen_name";
    	}else if (str == "headimgurl"){
    		str = "profile_image_url";
    	}else if (str == "sex"){
    		str = "gender";
    	}
    	return str;
    }
}
	private void doWeChatLogin(final OnLoginListener listener)
	{
		if (false == mShareAPI.isInstall(m_Context, SHARE_MEDIA.WEIXIN))
		{
			listener.onLoginFail(PLATFORM.WECHAT, "寰俊瀹㈡埛绔湭瀹夎,鏃犳硶鎺堟潈鐧婚檰");
			return;
		}
		
		if (null == m_Context || false == ThirdDefine.bConfigWeChat)
		{
			listener.onLoginFail(PLATFORM.WECHAT, "");
			return;
		}
		
		SendAuth.Req req = new SendAuth.Req();
		//授权读取用户信息
		req.scope = "snsapi_userinfo";
		//自定义信息
		req.state = "wechat_sdk_demo_test";
		//向微信发送请求
		myWXApi.sendReq(req);		
}

第二个是请求微信的AccessToken 第一段是请求回调的处理

还有问题的话,可加我的群,我们继续讨论

最好 GoodLucy

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值