package com.luoyikun.mywxshare;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXTextObject;
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.UnityPlayer;
public class MyWxShare extends Fragment {
String m_gameObjectName;
String m_funcName;
private Context unityContext;
private Activity unityActivity;
private static final String TAG = "MyWxShare";
public static final String APP_ID ="你的appid";
public IWXAPI api;
public void regToWx()
{
api = WXAPIFactory.createWXAPI(unityContext,APP_ID,true);
api.registerApp(APP_ID);
}
public void UnityFunc(String gameObjectName, String funcName)
{
m_gameObjectName = gameObjectName;
m_funcName = funcName;
}
private static MyWxShare Instance = null;
public static MyWxShare GetInstanceByAndroid(Activity activity,Context context)
{
if (Instance == null)
{
Instance = new MyWxShare();
Instance.unityActivity = activity;
Instance.unityContext = context;
activity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();
}
return Instance;
}
public static MyWxShare GetInstance()
{
if(Instance == null)
{
Instance = new MyWxShare();
Instance.unityActivity = UnityPlayer.currentActivity;
Instance.unityContext = Instance.unityActivity.getBaseContext();
UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(Instance, TAG).commit();
}
return Instance;
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRetainInstance(true); // 这一句很重要,保存对该Fragment的引用,防止在旋转屏幕等操作时时丢失引用(Fragment隶属于Activity)
regToWx();
}
// 调用 Unity
// gameObjectName 为接受消息的Unity 中 GameObject 的名字
// functionName 为接受消息的GameObject 挂载 C# 脚本中的函数名
// _content 为发送给Unity 的内容
public void CallUnity( String _content)
{
UnityPlayer.UnitySendMessage(m_gameObjectName, m_funcName, _content);
}
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
public void shareText(String text,int wxShareType)
{
WXTextObject textObj = new WXTextObject();
textObj.text = text;
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject =textObj;
msg.description = text;
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("text");
req.message = msg;
req.scene = wxShareType;
api.sendReq(req);
}
public void shareWebpage(String shareUrl, String title, String desc,String image,int shareType) {
WXWebpageObject webPage = new WXWebpageObject();
webPage.webpageUrl = shareUrl;
WXMediaMessage msg = new WXMediaMessage(webPage);
msg.title = title;
msg.description = desc;
//图片加载是使用的ImageLoader.loadImageSync() 同步方法
//并且还要创建图片的缩略图,因为微信限制了图片的大小
/* Bitmap thumbBmp = Bitmap.createScaledBitmap(ImageLoaderUtil.getBitmap(image), 200, 200, true);
msg.setThumbImage(thumbBmp);
thumbBmp.recycle();*/
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
//好友
req.scene = shareType;
// 调用api接口发送数据到微信
api.sendReq(req);
}
}
package 你的app包名.wxapi;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import com.luoyikun.mywxshare.MyWxShare;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.unity3d.player.UnityPlayer;
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, MyWxShare.APP_ID);
//把接受到的Intent给wxapi这个对象,它会解析回调结果,通过我们实现的IWXAPIEventHandler接口回调给我们
api.handleIntent(getIntent(), this);
}
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
//这里是核心:也就是微信支付结果会通知这个回调函数 在回调里我们通过UnityPlayer.UnitySendMessage通知Unity客户端支付结果
@Override
public void onResp(BaseResp resp) {
//resp就是回调所带的参数 微信->安卓层->Unity (resp)
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
//分享成功
Toast.makeText(this, "分享成功", Toast.LENGTH_SHORT).show();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//分享取消
Toast.makeText(this, "分享取消", Toast.LENGTH_SHORT).show();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
//分享拒绝
Toast.makeText(this, "分享拒绝", Toast.LENGTH_SHORT).show();
break;
}
//Toast.makeText(this, retCode, Toast.LENGTH_SHORT).show();
//通过这个方法 通知Unity层的某个物体上的某个方法 retCode就是调用Unity方法时候传递的参数
//UnityPlayer.UnitySendMessage("Cube","GetWxRsp", retCode);
finish();
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.luoyikun.mywxshare" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true">
//回调创建的Activity 如果还有其它 就在下面加入
<activity android:name="你的包名.wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
</application>
</manifest>
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation files('libs/libammsdk.jar')
//implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
implementation files('libs/classes.jar')
}
然后用打出的apk用官方签名apk得到签名在后台生成 AppId
public static void WxShareText(string text,EnWxShareType type)
{
AndroidJavaObject pluginObject = new AndroidJavaClass("com.luoyikun.mywxshare.MyWxShare").CallStatic<AndroidJavaObject>("GetInstance");
pluginObject.Call("shareText", text,(int)type);
}
public static void WxShareWebpage(string url,string title,string descr,string img, EnWxShareType type = EnWxShareType.WXSceneSession)
{
AndroidJavaObject pluginObject = new AndroidJavaClass("com.luoyikun.mywxshare.MyWxShare").CallStatic<AndroidJavaObject>("GetInstance");
pluginObject.Call("shareWebpage", url,title,descr,img, (int)type);
}
1.得到的签名在微信后台一定要填对,不然返回-6 2.如果测试微信调不起来,清除微信缓存,即可,因为上次的错误信息保存了