OPPO(畅思安卓)广告sdk接入unity工程遇到的一些错误和解决方案

来源:互联网 发布:ubuntu bsd 编辑:程序博客网 时间:2024/06/08 06:44

在广告sdk接入过程中,如果碰到的第三方广告sdk是个 unitypackage,那么导入一下就基本万事大吉。但是往往第三方广告商的sdk都是针对安卓(java)层面或者iOS(Objective-C)层面的库,这个时候就需要写几个中间层来从unity工程里去调用那些非C#的语言支持的库。这个过程也往往意味着会有很多比较偏底层的调试工作要进行。


要验证广告sdk是否接入成功,看到广告可以正常播放并且接下来也不会发生什么奇怪的事就可以了。但是接入失败的时候,就有可能有各种各样的地方出了问题。


1.

本文中提到的OPPO广告sdk版本号为ChanceAdSDK_5.3.5和ChanceAdSDK_5.3.6. (注意是畅思的安卓sdk,关于畅思的iOS的sdk以后会讲,基本上是另外一个次元的事了,因为都是和Objective-C跟C打交道)。


2.

lib.so文件一定不要忘记放进Unity工程的Plugins/Android/目录下,一定不要忘,不然几乎游戏一开始就会闪退(或者发生其他你不希望发生的奇怪的事),因为找不到lib.so。


3. 

C#调用Java代码时,注意用 Call 去调用Java层面的普通方法,用 CallStatic 去调用Java层面的静态方法。至于一个方法是否静态,可以看文档或者问相关SDK的技术人员。


4.

错误码1022

com.chance.ads.internal.av: [loadad]  : [[response]]:{"result":false,"err":1022,"ver":1}

运行时去加载广告没有反应,于是去查log,好在发现了错误码,去畅思安卓的官方文档里查到错误码1022的意思是:

“SDK请求的OS广告类型与平台配置不匹配”

去畅思官网上检查了下配置,发现placementID没有配置,于是配置了一下。

然而。。。

加载广告时依然没有反应,这次连错误码都没有了。


5.

AndroidJavaRunnable抛NullReferenceException

具体报错信息如下(马赛克掉了不能外传的信息):

NullReferenceException: Object reference not set to an instance of an object
                                                              at ChanceAndroidWrapper+<Init>c__AnonStorey1C.<>m__0 () [0x00000] in <filename unknown>:0 
                                                              at UnityEngine.AndroidJavaRunnableProxy.run () [0x00000] in <filename unknown>:0 
                                                              at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
                                                            Rethrow as TargetInvocationException: UnityEngine.AndroidJavaRunnableProxy.run()
                                                              at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0 
                                                              at UnityEngine.AndroidJavaProxy.Invoke (System.String methodName, UnityEngine.AndroidJavaObject[] javaArgs) [0x00000] in <filename unknown>:0 
                                                              at UnityEngine._AndroidJNIHelper.InvokeJavaProxyMethod (UnityEngine.AndroidJavaProxy proxy, IntPtr jmethodName, IntPtr jargs) [0x00000] in <filename unknown>:0 

其中的ChanceAndroidWrapper是我写的中间层之一,报错信息里又出现了很多的“AndroidJavaRunnable”字样,基本可以确定是我在中间层里的哪块儿加的东西导致报错了。

然后。。。

事情比我想象得简单,因为我在一段规定了在Ui thread运行的代码块里写了这么些东西:

_interstitial.Call("setPlacement", placementID);

_interstitial = new AndroidJavaObject("com.chance.ads.InterstitialAd", _activity);

_interstitial.Call("setAdListener", _listener);

所以显然。。。。会抛空指针异常啊!


6.

Ui Thread

在5中说到的问题,手残的我不止移动了 _interstitial.Call("setPlacement", placementID); 而且去掉了包裹在外的Ui Thread,渴望着一接sdk就成功的我,就这样突如其来地被新build闪退了一脸。

报错信息果不其然是Ui Thread相关,虽然已经大概知道如何解决,但本着不粘贴白不粘贴的态度,把具体报错信息放上来提高一下本文的逼格:

08-21 15:38:39.312 27926-27926/com.xxx.xxxxx D/AndroidRuntime: Shutting down VM
                                                                     
                                                                     
                                                                     --------- beginning of crash
08-21 15:38:39.313 27926-27926/com.xxx.xxxxx E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: com.xxx.xxxxxx, PID: xxxxxx
                                                                     java.lang.Error: FATAL EXCEPTION [main]
                                                                     Unity version     : 5.4.0f3
                                                                     Device model      : Xiaomi MI 4W
                                                                     Device fingerprint: Xiaomi/xxxxxxxxxxxxx/release-keys
                                                                     
                                                                     Caused by: java.lang.IllegalStateException: Calling View methods on another thread than the UI thread.
                                                                         at com.android.webview.chromium.WebViewChromium.createThreadException(WebViewChromium.java:295)
                                                                         at com.android.webview.chromium.WebViewChromium.checkThread(WebViewChromium.java:310)
                                                                         at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:223)
                                                                         at android.webkit.WebView.<init>(WebView.java:606)
                                                                         at android.webkit.WebView.<init>(WebView.java:542)
                                                                         at android.webkit.WebView.<init>(WebView.java:525)
                                                                         at android.webkit.WebView.<init>(WebView.java:512)
                                                                         at android.webkit.WebView.<init>(WebView.java:502)
                                                                         at com.chance.ads.internal.n.<init>(Unknown Source)
                                                                         at com.chance.ads.internal.ar.<init>(Unknown Source)
                                                                         at com.chance.ads.InterstitialAd.<init>(Unknown Source)
                                                                         at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
                                                                         at com.unity3d.player.UnityPlayer.a(Unknown Source)
                                                                         at com.unity3d.player.UnityPlayer$b$1.handleMessage(Unknown Source)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:98)
                                                                         at android.os.Looper.loop(Looper.java:148)
                                                                         at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
08-21 15:38:39.314 1734-2951/? W/ActivityManager:   Force finishing activity com.xxx.xxxxxx/com.unity3d.player.UnityPlayerNativeActivity




0 0
原创粉丝点击