I had a similar problem. I ended up using the LineTraceForObjects function.
You start with your object’s position, then you shoot a ray downward until you hit the ground, then you take that location and set it to your object’s location.
There’s an additional complication with this, because the earth tiles load in different LOD’s depending on how far away you are. This affects collisions also. This means that your object could be on the ground in one LOD, but not in the ground on another LOD. I’m not sure if there’s a way to handle this without checking every frame, but that’s what I had to do. I was able to get very reliable results using this. You just need to make sure you handle the case when the tile is completely removed because of camera culling.
The Cesium plugin has a bug right now, so the world’s collision is hard coding itself to WorldDynamic, so change that to WorldStatic when the plugin updates.