对接源生第三方广告遇到的问题

在Unity与Android交互中可使用 AndroidJavaProxy 这个类进行交互

首先在android里面定义接口,在Unity中实现这个接口,并继承于AndroidJavaProxy。 然后在android中就可以以多态的形式被调用,调用之后,就会调用到C# 的代码,然后就可以实现我们想要的与Unity与Android的回调

例子:
在安卓定义

public interface RewardAdListener {
    public void onReward(String str);
}

在Unity中实现这个接口

public sealed class RewardAdListener : AndroidJavaProxy
{
    public RewardAdListener() : base("com.adSdk.AdTest0916.RewardAdListener")
    {
    }
    public void onReward(string str)
    {
        Debug.Log("Unity: "+str);
    }
}

安卓中开放给Unity的方法

 public void LoadAwardAd(RewardAdListener listener) {
 	 listener.onReward("发放奖励");
 }

Unity调用安卓的方法

	AndroidJavaObject jo = new AndroidJavaObject("com.adSdk.AdTest0916.RewardAd");
	adNative.Call("LoadAwardAd",  new RewardAdListener());

就可以了,但是还有个问题是Java回调是在子线程,当子线程调用主线程的方法时就会报错,就需要让方法在主线程执行

	AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

    AndroidJavaObject jo = new AndroidJavaObject("com.adSdk.AdTest0916.RewardAd"); // 这个jo要用之前获得的RewardAd类否则是新创建的

     var runnable = new AndroidJavaRunnable(() =>
        {
            Debug.Log("执行show");
            jo.Call("ShowRewardAd", activity);
        });
        activity.Call("runOnUiThread", runnable);

https://blog.csdn.net/sgnyyy/article/details/53048552
https://docs.unity3d.com/ScriptReference/AndroidJavaRunnable.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值