refactoring based on generic ad interface, add support to native ad