项目标题: Cocos Creator微信登录接入(完全小白教程)(安卓篇) 项目正文: 项目作者在开发安卓游戏时,需要接入微信登录功能,但是网上搜索到的教程大多针对老版本Creator,或者只讲了iOS没讲安卓,走了很多弯路。项目目标是整理一份从零开始、针对Cocos Creator 3.x最新版本的安卓微信登录接入教程,尽量做到让完全没接触过原生安卓开发的游戏开发者也能看懂、看会。关键点包括:微信开放平台账号注册、应用签名获取、资源目录下配置、原生调用逻辑、回调处理、以及打包和测试的完整过程。 关键词: Cocos Creator, 微信登录, 安卓, 安卓篇, 小白教程 摘要描述: 面向Cocos Creator 3.x游戏开发者,详解安卓端微信登录接入全过程,涵盖开发者平台配置、原生端调用、回调处理与打包测试,图文结合,零基础友好。
Cocos Creator微信登录接入(完全小白教程)(安卓篇)
先交代一下背景。我做的是小游戏开发,用的是Cocos Creator 3.x,前阵子老板一句话“把微信登录加上”,我差点原地去世。网上能搜到的教程,要么是Creator 2.x老版本,要么讲了一半“iOS端以后再说”,要么默认你已经懂安卓原生开发那一套。我断断续续折腾了快一个星期,才把整个流程跑通。这期间踩过的坑,一个比一个典型。所以这篇东西,我不打算再写那种“复制粘贴就能跑”的假教程——每一步我都会告诉你为什么这么做,以及我当初是在哪里卡住的。
先说清楚这篇教程适合谁:正在用Cocos Creator 3.x做安卓游戏、需要接入微信登录、但是没写过安卓原生代码、看到“Android Studio”“Gradle”“签名文件”这些词就头大的纯游戏开发者。只要你按顺序跟着做,大概率能一次跑通。
1. 接入前的整体思路拆解
微信登录这东西,说穿了就是一个“游戏客户端向微信服务器换取用户身份”的过程。游戏端发起登录请求,微信App负责确认用户身份,然后把一个临时凭证交还给你的游戏客户端。你的游戏拿到凭证后,还得拿到自己的后台服务器去换用户的唯一标识,才算真正完成登录。
这个流程里,Cocos Creator游戏本身只负责两件事:调起微信和接收回调结果。真正跟微信服务器打交道的核心逻辑,其实是在安卓原生层面完成的。所以你的Creator工程里面,所有JavaScript端的代码加起来可能不到50行,大部分工作量都集中在安卓工程那一侧。
我见过很多新手把整个流程想反了,以为要在Creator里面调用某个现成的SDK,然后把AppID填进去就完事。真实情况是,Cocos Creator本身不内置微信SDK,也不提供微信登录的现成组件。你需要把微信官方的安卓SDK下载下来,放进你的安卓原生工程里,然后用JavaScript调用原生方法,原生方法再调起微信这个App,成功或取消之后再把结果回传给你JavaScript那边。
理顺了这个数据流向,后面的每一步就不会迷茫了。
1.1 微信登录的原理链条
一开始我在这上面浪费了不少时间,因为微信登录在开发者文档里被描述得特别轻描淡写——“完成上述步骤后即可拉起微信授权”。但真正做起来会有很多暗坑。
微信登录的完整链路分成五个环节:
- 游戏客户端(你的Cocos游戏打包出来的安卓App)发起登录请求
- 安卓原生层调用微信SDK,请求拉起微信App
- 微信App弹出授权页面,用户点击“允许登录”
- 微信App回调你的App,带回来一个临时凭证code
- 你的游戏客户端把code发给自己的后台服务器,后台服务器再拿着code找微信服务器换openid和session_key,完成真正的登录
这里最关键的一个认知是:你无法在客户端拿到用户的微信身份信息,客户端只能拿到一个临时凭证code。你后面要做的是把游戏内的用户标识和微信openid绑定起来,通常的做法是让后台服务器去换openid,然后凭openid在游戏内登录。
这一点决定了你的工程结构:你的游戏后台需要有“微信登录”对应的接口,能够接收前端传过来的code,并向微信服务器发起请求。如果你现在还没有后台,那至少要在游戏工程里预留一个“登录服务器地址”的配置位,等后台开发好了再接上。我在项目初期用的是本地调试时是直接用后台代码模拟了换code的流程,但这部分属于后台的活儿,不在本篇重点范围内。
1.2 需要准备的东西清单
正式开工之前,先把以下东西齐备。少一样都会卡住。
- 一个微信开放平台的开发者账号(不是公众号平台,也不是微信小程序后台,是专门给移动应用用的那个平台)
- 一个已经创建好的移动应用,审核通过后拿到AppID和AppSecret
- 一台Windows电脑(主要用来签名和配置)
- 一台安装了Android Studio开发工具,并配置好相关SDK依赖的电脑(没装过SDK的需要提前配好)
- 一个用于测试的安卓手机或者模拟器,模拟器必须支持微信安装和登录(这个非常关键)
- 微信App本身,测试机上必须先装好微信并登录一个微信号
这些东西里面,最容易让人犯迷糊的是“微信开放平台移动应用审核”这一环,因为它需要你提交一个应用签名和一个包名。很多小白就卡在这一步,因为签名不会算、包名填错。下面我会专门用一小节说清楚。
2. 微信开放平台配置:AppID、包名、应用签名
微信开放平台的配置是这一整个流程中的第一个卡点,也是最容易出问题的地方。很多人以为这一步只是填几个表单,其实里面藏的门道很多。
2.1 创建移动应用并拿到AppID
用你的微信开发者账号登录微信开放平台,在“管理中心”里选择“移动应用”,然后点击“创建移动应用”。这里要注意平台分类不能选错,我们接入的是“移动应用”,不是“网站应用”,更不能选成小程序之类的,选错了后面整个链路都是错的。
创建移动应用时会要求你填写应用名称、简介、图标等基础信息,这一步按实际情况填就行。我当时填的是游戏的中文名加后缀“Android版”,避免和iOS版冲突。提交后平台会走审核,审核时效从几个小时到两三天不等。审核通过后,应用概览页就能看到AppID和AppSecret了。
AppSecret务必只在后台使用,绝对不能写进游戏客户端里。微信登录的场景下客户端只需要AppID,AppSecret是后台服务器用来跟微信服务器换身份信息的凭证。如果你把AppSecret写进了客户端,就等于把保险柜钥匙公开贴在了门上。这一点我在很多半路出家的教程里见过错误示范,切记不要跟着犯。
2.2 包名从哪里来
创建移动应用时,有一栏叫“包名”,这个包名必须跟你Cocos Creator打包出来的安卓应用的包名完全一致,一个字符都不能差。包名的获取方式其实很简单——是你在Cocos Creator打包面板里的“包名”设置项直接拷贝的,默认可能带了一个示例包名,比如“com.example.demo”。你可以在打包面板里改成你自己的包名,比如“com.yourgame.demo”。
一个容易踩坑的地方是:你在Creator打包面板里修改了包名之后,微信开放平台里填写的包名,以及安卓原生工程里的包名,三处必须完全一致。如果Creator桌面版(模拟器调试用的)和安卓构建版(真机打包用的)各自有包名,要确保最终打包出来的Apk包名跟平台上填的一致。平台审核时会校验包名和你的应用签名是否匹配,只要有一个字符不对,登录就不起作用。
2.3 应用签名的获取:最不讲道理的一步
应用签名是什么?通俗地讲,相当于安卓应用的“指纹”,是同一公司、同一团队用来证明“这个应用确实是同一个应用”的数字证书。任何一个安卓应用发布时都需要用固定的签名文件来签名,微信SDK在校验时就会读取这个指纹,跟开放平台后台记录的指纹进行比对。
获取这个签名有好几种方法,我强烈推荐最简单的那种:直接用微信官方提供的“签名生成工具”App(在微信开放平台官网可以直接下载到)。把这个App装到手机上,输入你的包名,它就会直接输出你对应签名文件的MD5值,也就是你需要在后台填写的应用签名。注意这里不是安卓常用的那个SHA-1指纹,微信后台要填的是32位纯数字字母组合的MD5值,别搞混。
如果你手头已经有正式签名的Apk,也可以用命令行来获取。把Apk文件放到某个目录下,打开命令行工具,用jarsigner命令去查看证书指纹,然后在后台填写时去掉冒号、保留字符串。不过这种方法对小白不够友好,容易出错,我更建议直接用微信官方的签名工具App,既快又准。
提示:微信签名工具App读取的是你手机上安装的那个应用的签名。如果应用还没装到手机上,可以先打一个Debug包装上,用Debug包的签名去生成开发阶段用的应用签名。正式发布时如果换了正式签名,记得去平台上把应用签名改成正式签名的MD5值。
去年我在这步上整整浪费了两天,原因就是我把SHA-1指纹当成MD5填进去了,后台保存时并没有报错,结果真机登录时一直提示“签名不对”,微信官方工具给出的MD5才是正确的。这个错误非常隐蔽,因为报错信息不会直接告诉你“填错了签名”。
2.4 AppSecret的保存位置
AppSecret是微信登录链路中,客户端永远不应该出现的字段。很多小白教程里会教你把AppSecret写进微信SDK的初始化代码里,这是彻彻底底的错误示范。AppSecret是后台换token用的,一旦泄露,任何一个人拿着你的AppID和AppSecret就能伪造用户登录态。
如果你还没有后台,开发阶段可以先用一个测试脚本临时顶替。但产品正式上线前一定要把AppSecret收到后台去。本篇教程只涉及客户端接入部分,后台的接口示例我会在最后附上最简单的Python模拟代码,让大家理解这个流程,但不作为生产环境方案。
3. Cocos Creator 3.x工程里的具体操作
先把Creator端的所有操作流程走通,这部分算是整条链路里相对简单的,主要分两步:第一步在Creator工程里添加“原生安卓扩展”,第二步编写JavaScript端的调用封装。两步做完,你就可以打包出一个带微信登录能力的安卓工程。
3.1 在Creator里添加安卓原生扩展
Cocos Creator 3.x是在构建时生成原生安卓工程的,而原生工程里可以直接嵌入我们自己写的Java代码。你需要创建一个扩展目录,Creator的构建过程会自动把这个目录下的内容合并到原生工程里。
在项目根目录下的扩展目录中,按照文档要求放好你准备好的Java文件,并在AndroidManifest.xml里面声明微信SDK需要的Activity和权限。如果你在Creator里用的是默认的构建模板,可能还需要在构建模板的build.gradle中手动添加微信SDK的依赖。老版本和新版本的路径结构可能略有差异,但逻辑都是一样的——在生成的安卓工程里加入微信SDK的依赖和代码。
需要注意:Cocos Creator不同版本生成的原生工程目录结构不太一样。我这个项目用的是3.x版本,目录相对规整,但也需要在“构建后生成的原生工程目录”里手动添加依赖,因为Creator的构建面板默认不会自动引入微信SDK。
3.2 在Java层编写微信登录的原生实现
我建议把微信相关的Java代码统一放到一个文件里,比如取名WeChatManager,这样结构清晰,后续排查问题也方便。
这个文件需要做三件事:
第一,初始化微信SDK。在游戏的启动入口里调用一次微信SDK的注册方法,让微信SDK知道你的AppID是多少,这一步相当于“建立关系”。
第二,提供一个“发起登录”的方法。这个方法本质上就是构造一个登录请求,然后调起微信App。请求里需要带上前面提到的应用包名和AppID。
第三,实现回调接收。微信SDK在用户授权完成后,会把结果传回你的App。这个接收动作在安卓层叫“回调处理方法”。如果回调结果显示成功,就可以拿到临时凭证code,这个code是整个流程里最关键的一个返回值。
具体的回调写法是Android原生开发的基本功,但如果你是第一次接触,只需要照着完整示例抄一遍即可。回调方法写在GameActivity里,目的是把Java层的结果抛给JavaScript层。
3.3 JavaScript调用原生方法的封装
Creator 3.x的JavaScript跟安卓原生Java之间的桥梁是现成的,不需要自己搭。你可以直接通过全局对象调用原生层暴露的方法。我在设计时让Java层暴露了一个叫做“开始微信登录”的方法,JavaScript层写一个封装函数,点击“微信登录”按钮时调用它即可。
封装函数返回的是成功或失败的事件,失败会有原因码,成功则包含一个临时凭证。你需要把这个临时凭证保存下来,并立刻发送给后台服务器。发送的时机越快越好,因为这个凭证的有效期很短,几分钟内不用就过期了。
这个封装我在项目里做成了一个小模块,叫wxLogin.js,任何场景里要发起微信登录,只要import它然后调用一个方法就行。下面会展示完整代码。
3.4 完整代码示例
以下是可直接落地的代码。先看Java侧的核心类,我在关键位置加了详细注释:
package com.yourgame.demo; import android.app.Activity; import android.content.Intent; import android.util.Log; import com.tencent.mm.opensdk.constants.Build; import com.tencent.mm.opensdk.modelmsg.SendAuth; import com.tencent.mm.opensdk.openapi.IWXAPI; import com.tencent.mm.opensdk.openapi.WXAPIFactory; public class WeChatManager { private static final String TAG = "WeChatManager"; // 这里替换成你在微信开放平台申请到的AppID private static final String APP_ID = "你的AppID"; // 这是和JavaScript层约定的回调方法名 private static final String JS_CALLBACK_METHOD = "onWeChatLoginResult"; private IWXAPI wxApi; private Activity activity; public WeChatManager(Activity activity) { this.activity = activity; initWeChat(); } private void initWeChat() { wxApi = WXAPIFactory.createWXAPI(activity, APP_ID, true); // 向微信App注册你的应用信息 wxApi.registerApp(APP_ID); // 判断当前手机是否安装了能用的微信版本 boolean supported = wxApi.isWXAppInstalled() && wxApi.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT; if (!supported) { Log.e(TAG, "微信未安装或版本过旧"); } } public void wxLogin() { SendAuth.Req req = new SendAuth.Req(); // scope为"snsapi_userinfo"表示需要获取用户基本信息 req.scope = "snsapi_userinfo"; // state是自定义字段,建议填随机字符串,用于防伪造 req.state = "game_login_" + System.currentTimeMillis(); boolean sent = wxApi.sendReq(req); Log.d(TAG, "sendReq result: " + sent); } }然后是Activity里的回调接收部分。微信回调的Activity类名是固定约定好的,必须在AndroidManifest.xml里声明:
package com.yourgame.demo; import android.content.Intent; import android.os.Bundle; import com.cocos.game.AppActivity; import com.tencent.mm.opensdk.modelbase.BaseReq; import com.tencent.mm.opensdk.modelbase.BaseResp; import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler; public class WXEntryActivity extends AppActivity implements IWXAPIEventHandler { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); handleIntent(intent); } private void handleIntent(Intent intent) { // WeChatManager需要把同一个IWXAPI实例传过来,这里用单例持有 WeChatApiHolder.getWXAPI().handleIntent(intent, this); } @Override public void onReq(BaseReq baseReq) { // 当前场景不需要处理,留空即可 } @Override public void onResp(BaseResp baseResp) { int errCode = baseResp.errCode; SendAuth.Resp authResp = (SendAuth.Resp) baseResp; if (errCode == BaseResp.ErrCode.ERR_OK) { // 用户同意授权 String code = authResp.code; // 把code通过Creator的桥接层传给JavaScript CocosHelper.callJS("onWeChatLoginResult", code); } else { // 用户取消或者失败 CocosHelper.callJS("onWeChatLoginResult", String.valueOf(errCode)); } finish(); } }注意,上面的CocosHelper.callJS是我项目里的一个辅助方法,作用是让Java层直接调用JavaScript层的全局函数。Creator 3.x提供了现成的方法来完成这个跨语言调用,你可以在Cocos引擎提供的事件派发机制中找到对应的调用方式。具体用哪个API取决于你的Creator版本,构建时生成的模板工程里有现成的调用示例。
JavaScript侧的封装代码如下:
// wxLogin.js export function initWeChatManager() { // 调用安卓原生层暴露的初始化方法 if (window.jsb && window.jsb.WeChatManager) { window.jsb.WeChatManager.init(); } } export function wxLogin() { return new Promise((resolve, reject) => { if (!window.jsb || !window.jsb.WeChatManager) { reject(new Error('原生模块未加载,请确认构建的是安卓原生包')); return; } // 注册全局回调 globalThis.onWeChatLoginResult = (result) => { if (typeof result === 'string' && result.startsWith('err_')) { reject(new Error(result)); } else { resolve({ code: result }); } }; window.jsb.WeChatManager.wxLogin(); }); }使用的地方更简单:
import { wxLogin } from './wxLogin'; button.onClick = async () => { try { const { code } = await wxLogin(); // 发送code到你的游戏后台 const userInfo = await requestLoginWithCode(code); console.log('微信登录成功,用户数据:', userInfo); } catch (e) { console.warn('微信登录失败:', e.message); } };这套代码的逻辑非常直白:点了按钮,JavaScript发一条消息给原生,原生调起微信,微信回来后原生再发回调给JavaScript,JavaScript拿到code后发给后台。链路清晰,适合新手理解。
4. 构建、签名与真机测试:最容易翻车的环节
代码写完了,但离跑通还差最后一口气。我亲眼见过不少人卡在这一节,因为构建生成的Apk安装到手机上一看,微信压根没反应,或者微信跳起来了却报错“应用未通过校验”。这一环节的问题,90%集中在签名和构建配置上。
4.1 构建安卓原生工程
在Cocos Creator的构建发布面板里,构建平台选“安卓”,填好包名和版本号,然后点击构建。构建完成后,Creator会生成一个安卓原生工程。此时如果你直接点击“编译”按钮,Creator会调用安卓开发工具链把工程打包成Apk。
这里有一条很重要的经验:第一次构建时,务必确认构建模板和你的Java扩展文件已经被正确合并进原生工程。我遇到过一个很诡异的情况,Java文件在扩展目录里写好了,但构建出来的工程里找不到它们,仔细排查才发现是目录层级放错了。Creator在合并扩展文件时对目录格式有约定,不能随意改位置。如果你打开构建后的原生工程,在“扩展目录”对应的路径下没有发现你的Java文件,说明合并失败了。
4.2 Debug签名与正式签名的坑
Creator在开发模式下构建的Apk会自动使用一个Debug签名,这个签名文件通常位于构建目录的固定位置。如果你在微信开放平台后台填写的应用签名也是这个Debug签名的MD5值,那么开发阶段测试可以正常通过。
但要注意,正式发布时必须使用正式的Release签名文件。很多团队在开发阶段测试正常,一到上线才发现登录又失败了,就是忘了更新微信开放平台后台的应用签名。我把这个坑列在第一位,因为它实在太常见了。
我的做法是:在正式打包的电脑上,固定使用同一个签名文件,把该签名文件的MD5值提前在开放平台填好,同时保持Android项目里用的签名和这个文件完全一致。这样从根本上避免“开发用一套签名,发布用另一套签名”的错位问题。
4.3 真机测试时的注意事项
模拟器能不能用?可以,但有一个硬性条件:模拟器上必须能安装微信App,并且微信能正常登录。很多模拟器默认不兼容微信,装了也在登录时提示“当前设备不安全”,这种情况下你得换用真机,或者换一个接近真机环境的模拟器。
测试时请遵循以下几个细节:
- 打开手机的“开发者选项”,关闭“MIUI优化”等类功能,这类功能有时会影响包名解析
- 测试前先手动打开一次微信App,确保微信登录会话有效
- 手机关闭“纯净模式”或“安装验证”后再安装测试Apk,否则签名一致但无法安装
- 每次重新打包前,先把旧包卸载干净,避免包冲突
4.4 日志查看:找问题最快的方式
如果登录没有反应,第一个动作不是乱猜,而是看日志。连接USB数据线,开启USB调试,用安卓开发工具里的日志窗口查看输出。在日志窗口过滤“WeChatManager”和“wechat”关键字,就能看到对应的日志输出。
常见日志有这么几类:
- 没有
registerApp相关日志,说明Java代码没有被包含进Apk - 有日志但报错“签名错误”,说明开放平台填的签名跟Apk的实际签名不一致,回到2.3节重新获取签名
- 微信App压根没有被拉起,说明Activity配置或微信App本身有问题,检查Manifest里的Activity和微信是否正常安装
- 拉起后闪退,九成是AppID填错了,检查Java代码里的APP_ID跟开放平台是否一致
在开发阶段,尽量保留这些日志输出,正式上线前可以把日志等级调高或彻底关闭。我一般会在正式包里去掉了调试日志,但保留错误日志,方便线上排查问题。
5. 完整接入流程图解与常见问题速查
这里我把整个流程里最容易踩的坑整理成了一张速查表,方便后续复盘时一眼定位问题。
| 症状 | 最常见原因 | 解决方式 |
|---|---|---|
| 微信没有拉起登录 | 扩展Java文件未编译进Apk,或AndroidManifest没有声明Activity | 确认构建合并目录,检查Java文件存在后用日志验证 |
| 拉起微信后提示“签名不对” | 开放平台应用签名与Apk实际签名不一致 | 用微信官方签名工具重新生成MD5并替换 |
| 用户授权成功但拿不到code | 回调类没有正确处理Intent | 检查回调类和Activity回调方法是否配置 |
| 拿到code但后面的登录失败 | 后台没有正确换token,或code已经过期 | 确认后台接口正常,尽快把code传给后台 |
| 测试时能登录,正式包不行 | 正式包换了签名文件 | 用正式签名文件更新开放平台签名 |
| 提示“微信未安装” | 测试机没装微信或版本太旧 | 安装最新版微信后再测 |
| 多语言环境下报错 | 回调信息错误、授权被拒 | 查看日志定位具体错误码 |
5.1 微信回调Activity的配置说明
这个回调类是整个接入细节里最容易出错的地方。微信SDK要求你的应用必须有一个专门的Activity来接收微信回调,而且这个Activity的类名格式有固定约定,一般放在你的主包名下面,路径结构为包名.wxapi.WXEntryActivity,命名和位置错一点都不行。
在AndroidManifest.xml里,这个Activity还需要配置特定的启动模式,不是默认的启动方式。如果不配置或配错,回调可能丢失、登录无反应、或者闪退。建议直接把官方的配置模板抄过来,不要自己发挥。
5.2 进阶话题:代码过期与重复授权
微信登录的一个“隐藏知识点”是code只能使用一次。你用同一个code请求后台拿用户身份后,这个code就作废了。如果你在代码里不小心重复使用了一个code去换token,第二次会直接失败。
另外用户在微信端可以取消授权或切换账号,游戏端要做的是每次登录都走一次完整的登录流程。不要尝试缓存用户的openid然后直接放行,这种做法非常不安全,而且微信官方在接口策略上也不推荐。
5.3 如果后台还没开发好怎么调试
接微信登录时后台接口没到位,这是很常见的情况。我的应对方案是在Java层临时打印出code到日志里,然后手动复制到一个测试脚本里,用它来模拟后台的换token请求。等后台好了之后,再把这段临时逻辑去掉,改成把code直接POST给后台接口。
这样做的意义在于:你可以在后台不存在的情况下,先把整个客户端链路验证通,确认“能拉起微信→能拿到code→能收到回调”,到后面做后台对接时,问题范围就缩小到后台代码本身了,排查起来非常快。
6. 实操心得与几个容易被忽视的小细节
最后分享几个我经过多轮测试才摸清楚的细节,这些在官方文档和大多数教程里都没有直接写明白。
第一个是回调类的super方法调用。我在自己项目的回调Activity里,是继承主Activity来处理微信回调的,这种写法需要留意一个顺序问题:即先调用super的onCreate / onNewIntent,再处理Intent里的数据。顺序颠倒可能导致一部分初始化代码尚未执行,回调数据获取异常。这个坑我当时排查了一下午,最终通过对比官方模板代码才发现是顺序问题。
第二个是AppID在多个位置出现。同一个小游戏如果同时出了iOS版和安卓版,注意微信开放平台给每个平台各分配一套独立的AppID,不要混用。有些开发者图省事,想安卓端用iOS端的AppID跑,结果“签名不对”或“参数错误”轮番报错。这个排查优先级极高,我在开发中就曾误把另一个AppID填进Java代码里,导致日志里始终报非法参数,改回去之后一切正常。
第三个是构建完成后改动Java代码需要重新构建。很多人以为只改Java不动Creator资源,就不用重新构建整个工程,直接在原生工程里用安卓开发工具编译就行。实际上如果后续你还想使用Cocos Creator的构建能力统一管理资源,那Java代码的变更需要触发一次完整的Creator构建,否则合并的结果不会更新。我的做法是:频繁调试期直接改原生工程再用安卓开发工具编译,能省不少时间;但正式出包前必须走一遍Creator的完整构建流程,避免资源不一致。
第四个是开发者工具的本地缓存问题。Creator在构建过程中会对文件做增量处理,如果Java文件本身的修改时间没有变化,但内容被外部工具(比如编辑器另存为)改过,构建可能仍然使用旧版本。这个现象不常见,但被我碰到过一次。处理方式很简单:改完Java文件后,在Creator里手动“清除构建缓存”再重新构建。
7. 后台接口补充与代码收尾
虽然这篇教程定义是“客户端接入”,但没有后台接口,整个流程跑不通。所以我在这里补一个非常简单的后台接口示例,用Python写,相当于给小白完整闭环。真实项目中你用什么后端技术栈无所谓,逻辑是一样的。
# flask 示例 @app.route("/wx_login") def wx_login(): code = request.args.get("code") appid = "你的AppID" secret = "你的AppSecret" url = "https://api.weixin.qq.com/sns/oauth2/access_token" params = { "appid": appid, "secret": secret, "code": code, "grant_type": "authorization_code" } resp = requests.get(url, params=params).json() if "openid" in resp: # 到这里就是登录成功了 # openid是用户的唯一标识,用它在你的游戏数据库里建账号 return make_success(resp["openid"]) else: return make_error(resp.get("errmsg", "login failed"))这个示例里的requests和Flask都只是示意,重要的是理解流程:后台接收到客户端传来的临时凭证code,携带AppID和AppSecret去微信服务器换取openid,然后拿着openid决定是新建用户还是走老用户登录逻辑。
如果你使用的后端是Java、Go、PHP,逻辑完全一样,只需要找对应的HTTP请求库把上面的接口调用换成对应语言写法。不要在这个环节纠结技术栈,核心是理解数据流转。
我在实际做这一步时体会最深的一点是:整套微信登录流程,真正难的部分并不在于“写代码”,而在于理解“什么时候该调什么、谁在等谁的返回值”。只要把链路理清,签名正确,包名一致,代码本身是很快就能抄完的。最后提醒一次:开发期反复修改包名和签名时,开放平台后台和代码里的配置务必同步更新,所有报错先从这两个配置项查起,能避开大部分烦恼。