CocosCreator系列——接入原生微信登陸功能

CocosCreator系列——接入原生微信登陸功能

先看一下微信官方的接入文檔吧,不得不說,我真的懷疑微信的文檔肯定不是技術寫的,簡直亂得一批,看的人頭昏腦脹,主要看一下這個鏈接的接入流程就行了,不要看接入的技術文檔,跳到坑裏怕是就爬不上來了(小吐槽一波微信),好了,吐槽就到這裏,接下來該真槍真刀的實幹一番了。
前期準備工作:準備好在微信開放平臺上申請的AppIDAppSecret
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();
    }
}

好了,其實只要到這一步,拿到回調以後,跟服務器調一下就可以了,剩下的工作就是水到渠成的事了,很簡單的一個東西,不知道微信的文檔都寫的什麼東西,(手動頭大)。
這裏登陸的時候還有一個坑,可能會提示簽名不一致,看我的另一篇文檔吧

確定不粉我一下麼 ( ̄▽ ̄)"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章