以前在Unity里面接入Google,iOS的IAP(In-App-Purchasing)的时候,有几种方法,第一种是使用原生的方法来接入,第二种是使用第三方插件(例如我们之前用过Soomla)。第一种对Unity程序员要求比较高,需要分别了解Android,iOS开发的一些知识。第二种相对比较方便。现在,从5.3开始,Unity自己也提供了IAP服务。需要的话,请参见:Integrating Unity IAP In Your Game 教程写的非常详细,一步一步来,很容易把IAP集成到你的项目里面。
集成完毕之后,那么问题来了,导出Android Studio工程,多了3个文件夹(之前是只有MyProj这个文件夹)。作为Android小白的我一脸懵B,还怎么导出AS工程?
以前只有1个文件夹,那么直接AS->File->New->Import Project...,然后选中MyProj,然后下一步下一步就可以导出AS工程了,现在是4个文件夹?怎么办?不要慌,老铁,方法没变,Import时还是定位到MyProj,而不是它的上层目录!
Project导出之后,你就会发现,app的gradle文件里面多了3行。
implementation project(':common')
implementation project(':googleAIDL')
implementation project(':googlePlay')
然后Make,就会发现以下错误:
Program type already present: com.unity.purchasing.googleplay.BuildConfig
解决方法有两种:
第一种:修改对应依赖库的build.gradle文件,加入packageBuildConfig = false,如下:
android {
packageBuildConfig = false
...
第二种:修改minSdkVersion>=21 但是这会导致你的游戏无法再Android5.0以下的机型上运行。
传送门:https://forum.unity.com/threads/error-building-apk-on-android-studio-duplicate-entry.418677/
然后打APK包,一点击购买,发现会报下面的错误:
02-21 14:56:20.306 1662-1688/? E/Parcel: Class not found when unmarshalling: com.google.android.finsky.billing.common.PurchaseParams
java.lang.ClassNotFoundException:com.google.android.finsky.billing.common.PurchaseParams
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at android.os.Parcel.readParcelableCreator(Parcel.java:2404)
at android.os.Parcel.readParcelable(Parcel.java:2358)
at android.os.Parcel.readValue(Parcel.java:2264)
这个我花了好多时间去查,一直以为是我的jar包包含不全导致的。后来查了好多资料后,发现解决方案是:
1. 在Google Play的后台添加测试账号(!注意,测试账号与开发者账号不能是同一个,不然后面服务器校验也会有问题)
2. 给测试账号发送测试邀请
3. 测试账号确认邀请,加入测试组。
然后,就不会有“com.google.android.finsky.billing.common.PurchaseParams”的问题了。