When being organized in Unity 3D is dangerous

While adding Prime31’s Android In-App Billing to an existing game I came across a weird behavior: the calls to the native plugin (made through the GoogleIAB class) were being registered but the callback events (the ones defined in GoogleIABManager) weren’t firing.

After half a day of looking at Android’s documentation, browsing the existing knowledge base and trying different things I found the problem: in a previous refactor I had modified the source files provided by the plugin to put the classes inside a custom namespace. Apparently the reflection methods internally used by the plugin don’t like this and it failed silently. No indication that the type couldn’t be found, failed instancing or the methods didn’t exist.

Morale of this story is to never modify the source code of existing Unity 3D plugins as they usually are quite weak and can break, so whenever you install something from the Asset Store make sure you don’t modify it. In case someone ever has the same problem I added it to the official knowledge base.