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 其实写不写都行看个人