CocosCreator系列——接入原生微信登陸功能
先看一下微信官方的接入文檔吧,不得不說,我真的懷疑微信的文檔肯定不是技術寫的,簡直亂得一批,看的人頭昏腦脹,主要看一下這個鏈接的接入流程就行了,不要看接入的技術文檔,跳到坑裏怕是就爬不上來了(小吐槽一波微信),好了,吐槽就到這裏,接下來該真槍真刀的實幹一番了。
前期準備工作:準備好在微信開放平臺上申請的AppID和AppSecret
1.直接上快車下載微信sdk吧,官網上的打開一個下載鏈接簡直是蝸牛拖着烏龜爬的速度。
2.新建一個hello world工程,來一個微信登陸的按鈕,然後綁定拉起微信登陸的代碼
onWeiXinLoginClick() {
if (cc.sys.os == cc.sys.OS_ANDROID) {
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "login", "()V");
}
},
3.打開構建好的工程,在NewProject01\build\jsb-link\frameworks\runtime-src\proj.android-studio\app此目錄下新建一個lib文件夾,把下載的微信sdk拖入
4.用Android studio工具 import工程文件,AppActivity中初始化個參數
private static final String APP_ID = "你申請的appid";
private static IWXAPI api;
public static AppActivity app = null;
5.在onCreate()方法裏面註冊
app = this;
// 通過WXAPIFactory工廠,獲取IWXAPI的實例
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
// 將應用的appId註冊到微信
api.registerApp(APP_ID);
Log.e("註冊成功:::","111111111111111111111");
6.js客戶端點擊微信登陸調用的方法
public static void login(){
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_aifuns";
api.sendReq(req);
Log.e("登陸成功:::","111111111111111111111");
}
7.下面的兩個方法等下要在微信回調類裏面用要用
public static AppActivity getInstance(){
return app;
}
public static IWXAPI GetAPI() {
return api;
}
8.NewProject01\build\jsb-link\frameworks\runtime-src\proj.android-studio\app\src目錄下新建com.xxx.xxx.wxapi路徑,注意:這裏有個坑,com.xxx.xxx對應的是Android studio工程build.gradle中對應的applicationId,不然會出現登陸微信成功以後收不到回調的問題,然後再com.xxx.xxx.wxapi目錄下新建WXEntryActivity.java,然後編輯代碼,下面奉上這個類的全部代碼
package com.XXX.XXX.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
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.IWXAPIEventHandler;
import org.cocos2dx.javascript.AppActivity;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppActivity.getInstance().GetAPI().handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
AppActivity.getInstance().GetAPI().handleIntent(getIntent(), this);
finish();
}
@Override
public void onReq(BaseReq req) {
// TODO Auto-generated method stub
Log.e("WeiChatLogin", "onReq++++++++++++");
finish();
}
@Override
//微信登陸成功後,會回調此方法
public void onResp(BaseResp resp) {
switch (resp.getType()) {
case ConstantsAPI.COMMAND_SENDAUTH:
final SendAuth.Resp authResp = (SendAuth.Resp) resp;
//在這裏處理的邏輯就可以了
Log.e("code",authResp.code);
Log.e("state",authResp.state);
Log.isLoggable("errCode",authResp.errCode);
break;
case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: // 分享給好友、朋友圈
case ConstantsAPI.COMMAND_PAY_BY_WX:
break;
}
finish();
}
}
好了,其實只要到這一步,拿到回調以後,跟服務器調一下就可以了,剩下的工作就是水到渠成的事了,很簡單的一個東西,不知道微信的文檔都寫的什麼東西,(手動頭大)。
這裏登陸的時候還有一個坑,可能會提示簽名不一致,看我的另一篇文檔吧。
確定不粉我一下麼 ( ̄▽ ̄)"