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
- OPPO(畅思安卓)广告sdk接入unity工程遇到的一些错误和解决方案
- Android接入Unity Ads广告SDK所遇到的坑
- Android sdk 接入时遇到的错误解决方案
- unity接入咪咕SDK遇到的坑
- SDK接入遇到的问题
- Vuforia SDK---- Vuforia+unity模型抖动和识别错误解决方案
- SVN 遇到的一些错误解决方案
- 百通sdk接入广告
- Android广告SDK接入:
- unity工程接入Android sdk后真机测试解锁屏后退出的解决
- Unity接入友盟SDK后,添加打开安卓APP的功能 遇到的问题
- unity接入讯飞语音识别iOS SDK的遇到的棘手问题!
- Unity接入sdk时(和android交互),提示IOException错误解决方式。
- 【Unity&NGUI】启动工程文件遇到的错误
- cocos2dx项目接入爱贝第三方支付sdk遇到的问题及解决方案
- 接入支付宝SDK遇到的坑
- 接入华为推送,开发流程, 与遇到的坑(PUSH SDK 和 HMS SDK)
- Putty遇到的一些问题和解决方案
- Installing 11.2.0.3 Or 11.2.0.4 (32-bit (x86) or 64-bit (x86-64) ) On RHEL6 Reports That Packages "e
- 根文件系统
- 关于Handler消息机制一点愚见与总结
- quartz在集群环境下的最终解决方案
- 趣味算法题——中国象棋将帅问题
- OPPO(畅思安卓)广告sdk接入unity工程遇到的一些错误和解决方案
- iOS开发中常用第三方库的整理
- 一篇关于视频下载的技术贴(源码)
- 多线程——Join的用法解析
- art apk像facebook、微信等apk安装失败,安装慢等问题
- session数据库监控-表和视图
- centos 6.8 安装 zmap 和 forge-socket 脚本
- const 与 shared_ptr
- NodeJs——进程管理(一)