unity 和android 交互之回调

17 篇文章 0 订阅
10 篇文章 0 订阅

当想调用androidSDK里面的接口,当接口里面的行为处理完了之后想要做其他的事时,我们怎么办呢?

如果你写死了,而且不能够随机应变。当需要处理其他的行为时。

例如:当你想调用androId原生广告播放接口时,当广告播放完之后你需要添加金币的行为,这个时怎么加入到接口中,这个就要用了回调了

首先需要在anroid里面加入一个回调接口

1.例如广告接口`

public interface AdCallback {
    void onDismissed();

    void onNoAd(AdError adError);

    void onComplete();

    void onPresent();

    void onClick();

    void onAdSkip();
}

2.需要在unity中也要添加一样的类

public class AdCallback : AndroidJavaProxy
{
    public Action Dismissed;

    public Action OnNoAd;

    public Action OnComplete;

    public Action OnPresent;

    public Action OnClick;

    public Action OnAdSkip;


    public AdCallback(string interfaceName) : base(interfaceName)
    {

    }

    public void onDismissed()
    {
        Dismissed?.Invoke();
    }

    public void onNoAd(AndroidJavaObject adError)
    {
        OnNoAd?.Invoke();
    }

    public void onComplete()
    {
        OnComplete?.Invoke();
    }

    public void onPresent()
    {
        OnPresent?.Invoke();
    }

    public void onClick()
    {
        OnClick?.Invoke();

    }

    public void onAdSkip()
    {
        OnAdSkip?.Invoke();
    }

}

好了前期准备好了

现在就是需要添加广告接口
比如下面是广告接口的类

  public class PlayAd implements AdCallback{
   private AdCallback _adCallback 
    public static void ShowReward(AdCallback adCallback) {
        Log.e("广告:", "广告");
        _adCallback = adCallback;
        //播放广告的逻辑
    }
    @Override
    public void onDismissed() {
        _adCallback.onDismissed();
    }
    @Override
    public void onNoAd(AdError adError) {
        _adCallback.onNoAd(adError);
    }
    @Override
    public void onComplete() {
        _adCallback.onComplete();
    }
    @Override
    public void onPresent() {
        _adCallback.onPresent();
    }
    @Override
    public void onClick() {
        _adCallback.onClick();
    }
    @Override
    public void onAdSkip() {
        _adCallback.onAdSkip();
    }
  }

然后就是在unity 里面调用了

public class NewAdMgr
{
  public const string AdCallbackPath = "com.bytedance.android";
    private AndroidJavaClass jcAd;

    public void Init()
    {
#if UNITY_ANDROID
        jcAd = new AndroidJavaClass(AdCallbackPath );
#endif
    }

  public void ShowReward_Ad(AdCallback adCallback)
    {
        //var  currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jcAd.CallStatic("ShowReward", adCallback);
    }

     public void ShowReward()
    {
        AdCallback adCallback = new AdCallback(AdCallbackPath);
        adCallback.Dismissed = () => { };
        ShowReward_Ad(adCallback);
    }
}

public void ShowReward(Action action)
{
AdCallback adCallback = new AdCallback(AdCallbackPath);
adCallback.Dismissed = () => { action?.Invoke();};
ShowReward_Ad(adCallback);
}
这个方法调用就是播放广告

欢迎各位大佬指出问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值