前往 微信官方文档 •开放平台 ,Android开发工具包下载 ,范例代码HelloWeixin下载 。
一、生成安卓keystore签名 使用这个Android Studio 生成的keystore,有一个在线生成安卓证书在线制作工具
二、在所在包名下的目录新建一个文件夹wxapi 然后新建一个类 WXEntryActivity.java名字和文件名需要一样。
三、实现WXEntryActivity.java代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 package com.ds.quwami.wxapi;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.widget.Toast;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.tencent.mm.opensdk.openapi.WXAPIFactory;import org.cocos2dx.javascript.AppActivity;import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private String APP_ID = "wxq28466eh4b48be59" ; public static IWXAPI api; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); api= WXAPIFactory.createWXAPI(this ,APP_ID,true ); api.registerApp(APP_ID); api.handleIntent(getIntent(), this ); } @Override protected void onNewIntent (Intent intent) { super .onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this ); } @Override public void onReq (BaseReq baseReq) { } @Override public void onResp (BaseResp resp) { int errorCode = resp.errCode; switch (errorCode) { case BaseResp.ErrCode.ERR_OK: final String code = ((SendAuth.Resp) resp).code; Log.i("WXEntryActivity" , "WXEntryActivity onResp: code=" + code); AppActivity.calljs(code); break ; case BaseResp.ErrCode.ERR_AUTH_DENIED: Toast.makeText(this , "微信登录 用户拒绝" , Toast.LENGTH_SHORT).show(); break ; case BaseResp.ErrCode.ERR_USER_CANCEL: Toast.makeText(this , "微信登录 用户取消" , Toast.LENGTH_SHORT).show(); break ; default : break ; } finish(); } }
然后在 AndroidManifest.xml 主文件中添加
1 2 3 4 5 6 7 8 <activity android:name ="com.ds.~.wxapi.WXEntryActivity" //这儿换成你自己的 android:label ="@string/app_name" android:theme ="@android:style/Theme.Translucent.NoTitleBar" android:taskAffinity ="com.ds.~" //这儿换成你自己的 android:exported ="true" android:launchMode ="singleTask" > </activity >
添加位置,如图红色框的部分:
其中android:name = "com.~.wxapi.WXEntryActivity"这个就是对应这个路径目录。
添加WXAPI依赖 ,打开build.gradle文件,注意是proj.android-studio/~你的项目名字 目录下,在dependencies中加下面的代码 api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+',这儿game下的 build.gradle也要添加。
1 2 3 4 5 6 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar','*.aar']) implementation fileTree(dir: "/Applications/CocosCreator2.3.2.app/Contents/Resources/cocos2d-x/cocos/platform/android/java/libs", include: ['*.jar']) implementation project(':libcocos2dx') api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+' }
AppActivity.java中的实现,wxLogin函数必须是静态的,这样才可以去外部调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 package org.cocos2dx.javascript;import android.content.Intent;import android.content.res.Configuration;import android.os.Bundle;import android.widget.Toast;import com.tencent.mm.opensdk.modelmsg.SendAuth;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.WXAPIFactory;import org.cocos2dx.lib.Cocos2dxActivity;import org.cocos2dx.lib.Cocos2dxGLSurfaceView;import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;public class AppActivity extends Cocos2dxActivity { private String APP_ID = "wxq28466eh4b48be59" ; public static IWXAPI api; public static AppActivity act; @Override protected void onCreate (Bundle savedInstanceState) { super .onCreate(savedInstanceState); if (!isTaskRoot()) { return ; } SDKWrapper.getInstance().init(this ); api= WXAPIFactory.createWXAPI(this ,APP_ID); api.registerApp(APP_ID); act = this ; } @Override public Cocos2dxGLSurfaceView onCreateView () { Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this ); glSurfaceView.setEGLConfigChooser(5 , 6 , 5 , 0 , 16 , 8 ); SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView, this ); return glSurfaceView; } @Override protected void onResume () { super .onResume(); SDKWrapper.getInstance().onResume(); } @Override protected void onPause () { super .onPause(); SDKWrapper.getInstance().onPause(); } @Override protected void onDestroy () { super .onDestroy(); if (!isTaskRoot()) { return ; } SDKWrapper.getInstance().onDestroy(); } @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { super .onActivityResult(requestCode, resultCode, data); SDKWrapper.getInstance().onActivityResult(requestCode, resultCode, data); } @Override protected void onNewIntent (Intent intent) { super .onNewIntent(intent); SDKWrapper.getInstance().onNewIntent(intent); } @Override protected void onRestart () { super .onRestart(); SDKWrapper.getInstance().onRestart(); } @Override protected void onStop () { super .onStop(); SDKWrapper.getInstance().onStop(); } @Override public void onBackPressed () { SDKWrapper.getInstance().onBackPressed(); super .onBackPressed(); } @Override public void onConfigurationChanged (Configuration newConfig) { SDKWrapper.getInstance().onConfigurationChanged(newConfig); super .onConfigurationChanged(newConfig); } @Override protected void onRestoreInstanceState (Bundle savedInstanceState) { SDKWrapper.getInstance().onRestoreInstanceState(savedInstanceState); super .onRestoreInstanceState(savedInstanceState); } @Override protected void onSaveInstanceState (Bundle outState) { SDKWrapper.getInstance().onSaveInstanceState(outState); super .onSaveInstanceState(outState); } @Override protected void onStart () { SDKWrapper.getInstance().onStart(); super .onStart(); } public static void wxLogin () { if (!api.isWXAppInstalled()) { Toast.makeText(act, "您还未安装微信客户端" , Toast.LENGTH_SHORT).show(); }else { SendAuth.Req req=new SendAuth.Req(); req.scope="snsapi_userinfo" ; req.state="wx_login" ; api.sendReq(req); } } public static void calljs (final String code) { act.runOnGLThread(new Runnable() { @Override public void run () { final String jvCallCode =String.format("cc.jsEngineCallback(\"%s\")" ,code); Cocos2dxJavascriptJavaBridge.evalString(jvCallCode); } }); } }
cocos登陆页面调用,微信登陆。
1 2 3 4 5 6 7 8 9 10 11 12 13 wxChatLogin(){ if (cc.sys.OS_ANDROID == cc.sys.os){ jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity" , "wxLogin" , "()V" ); }else if (cc.sys.OS_IOS == cc.sys.os){ jsb.reflection.callStaticMethod("AppController" , "wxSendAuth" ); }else { cc.hud.show(1.5 ,'非移动客户端暂不支持微信登陆' ); } cc.jsEngineCallback = function (wxCode ) { this .getWXCodeSuceess(wxCode); }.bind(this ); },
这儿微信登陆需要真机调试,为了方便直接打包debug和release使用之前生成keystore。
上面的密码改成生成 keystore时的密码,然后再调试运行在手机上。
这儿如果有什么问题可以直接企鹅上留言: 1197696574 交流。