Unity Android接入微信登录注意事项

1.如果是Demo测试一定要把测试包名跟提交微信SDK的包名一致不然会收不到回调!!!!

2.

   <activity
            android:name="com.A.B.wxapi.WXEntryActivity"<!--不一定要写成.wxapi.WXEntryActivity  可以直接指定包名   比如我提交微信SDK的包名是com.A.B 那就可以这样写-->
            android:exported="true"
            android:taskAffinity="com.A.B"  <!--注意这个地方一定要填写微信提交的包名-->
            android:launchMode="singleTask">
        </activity>

3.WXEntryActivity一定要继承 和Activity 实现 IWXAPIEventHandler

4. WXEntryActivity 实现IWXAPIEventHandler的onResp要在结尾行加上 finish(); 不然会导致返回后黑白屏。

贴一下我的WXEntryActivity

package com.yunying.avalod.wxapi;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import androidx.annotation.Nullable;

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 com.yunying.avalod.WeChatController;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Unity","entry");

       WeChatController.api.handleIntent(getIntent(), this);
    }

    @Override
    public void onReq(BaseReq baseReq) {
    }

    @Override
    public void onResp(BaseResp resp) {

            switch (resp.getType()){
                case 1://登录
                        if (resp.errCode==0){
                            Log.e("Unity","SUCCES");
                            String code = ((SendAuth.Resp) resp).code;
                            Log.e("Unity","code:"+code);//拿到code 自己去请求吧 我这里是放到Unity请求了
                        }else{
                            Log.e("Unity","FAILURE");
                        }
                    break;
            }

        finish();

    }
}

Main类

package com.yunying.avalod;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;

import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.unity3d.player.UnityPlayerActivity;

public class AvalodActivity extends UnityPlayerActivity {

    public IWXAPI api;

    private String _APP_ID = "自己申请的微信APPID";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Unity","Init");
        Init(this);
    }

    private void Init(Context content) {
        Log.e("Unity","content:"+(content==null));
        Log.e("Unity","APPID:"+(_APP_ID==null));
        WeChatController.api = WXAPIFactory.createWXAPI(content, _APP_ID, true);
        Log.e("Unity","API:"+(WeChatController.api==null));
        WeChatController.api.registerApp(_APP_ID);

    }

    // 分享链接至微信
    // scene: 分享到哪个场景 0 代表对话、1 代表朋友圈、2 代码收藏
    public void ShareWebpageToWXs(String url, String title, String description) {
        // 设置网址
        WXWebpageObject webpageObject = new WXWebpageObject();
        webpageObject.webpageUrl = url;

        // 设置标题
        WXMediaMessage msg = new WXMediaMessage(webpageObject);
        msg.title = title;
        msg.description = description;


        // 构造一个发信请求
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = String.valueOf(System.currentTimeMillis())+"LJH";
        req.message = msg;
        req.scene = 0;
        Log.e("Unity","API:"+(WeChatController.api==null));

        // 发送请求给微信客户端
        WeChatController.api.sendReq(req);
    }

    //微信登录
    private void WeChatLogin(){
        SendAuth.Req req=new SendAuth.Req();
        req.scope="snsapi_userinfo";
        req.state="Avalod";
        WeChatController.api.sendReq(req);
    }

}

这里有个地方要注意推荐把wxapi写成全局静态的,不然很容易发生注册后再去调用api返回为null的情况

WeChatController

package com.yunying.avalod;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telecom.Call;
import android.util.Log;

import androidx.annotation.Nullable;

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.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

public class WeChatController{

    public static IWXAPI api;

}

WeChatController 其实写不写都行看个人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值