Monetizar aplicaciones Python para escritorio
Gana dinero con tus aplicaciones de escritorio creadas con Python




INTRODUCCIÓN

¿Puedo ganar dinero con mis aplicaciones creadas con Python?. Evidentemente si: puedes vender tu software, crear un sitio web que te de beneficios o trabajar para una empresa como programador.

Pero ¿puedo monetizar mis aplicaciones de escritorio mediante publicidad incrustada?. Puedes hacerlo con Python.NET o con IronPython.


ACTUALIZACIÓN (11/01/2021): MI EXPERIENCIA PERSONAL - El dinero no cae del cielo

He utilizado adsjumbo durante varios meses y solamente una de mis aplicaciones daba algo. Esta aplicación es LoL Absent, que tiene bastantes descargas semanales. Mostrando entre 100 y 500 anuncios al día, Lol Absent ha dado entre 0.01$ - 0.10$. Necesitas miles de usuarios utilizando tu aplicación si quieres obtener algún beneficio.

No parece que vayamos a hacernos ricos con adsjumbo, pero algo es algo... salvo porque no cobrarás hasta llegar al mínimo de 30$ (en mi caso y siendo optimista, hubiese tardado mínimo un años en alcanzar esta cifra).

Sin embargo nada de esto fue lo que me hizo abandonar adsjumbo, sino el memory leak: Mientras mi aplicación consume un máximo de 20mb de memoria ram mientras se ejecuta, con el sdk de adsjumbo implementado la aplicación se inicia consumiendo unos 120mb de memoria ram y no para de crecer (llegué a ver a mi aplicación consumiendo 4gb de memoria solamente por mostrar dos banners).

Puede que este problema tenga una solución que no conozco, pero definitivamente decidí abandonar los banners en mi aplicación y solamente puse un botón donate y crucé los dedos.

Pese a estos inconvenientes, si tienes curiosidad continúa leyendo:

Vamos a crear una aplicación de ejemplo utilizando Visual Studio y Python.NET y le añadiremos un Banner publicitario.

¡¡Empecemos!!




CREAR UNA APLICACIÓN PYTHON.NET - WINFORMS

Lo primero que tenermos que hacer es crear un proyecto de WinForms en Visual Studio en el que crearemos la interfaz gráfica de la aplicación arrastrando y soltando, sin escribir código. Luego compilaremos el proyecto a biblioteca de clases y la utilizaremos desde un script python. Empecemos:

  1. Abre Visual Studio y crea un nuevo proyecto:

    VS- Crear un Proyecto

  2. Selecciona Aplicación de Windows Form (.NET Framework):

    Aplicación WinForms (.NET)

  3. El nombre del proyecto será ui4app y debe utilizar .NET Framework 4.7.2:

    Configuración Inicial del Proyecto

  4. Una vez creado el proyecto, añade un Button al formulario arrastrándolo del cuadro de herramientas:

    En la parte derecha de Visual Studio están las propiedades del widget/control seleccionado. He seleccionado el botón y he modificado su propiedad Text para que el texto del botón sea Python Action.

    Además, es importante que modifiques las siguientes propiedades del botón:

    • (Name): button
    • Modifiers: Public

    El valor de (Name) es el identificador del control, es decir, en el código python de la aplicación, la variable button hace referencia al botón. Por otra parte, el botón solamente será accesible desde el código python si su propiedad Modifiers tiene el valor Public.

  5. Modifica las propiedades del proyecto.

    Hemos creado un proyecto de WinForms, pero realmente lo que queremos crear es una biblioteca de clases que utilizará nuestra aplicación python. La razón por la que al principio hemos seleccionado un proyecto WinForms es porque así podemos crear la interfaz gráfica de la aplicación arrastrando y soltando en lugar de escribir código.

    En el menú de la parte superior de Visual Studio haz click en PROYECTO - Propiedades de ui4app y en el campo Tipo de Salida seleccionada Biblioteca de clases:

    Proyecto de Biblioteca de clases

  1. Compila la biblioteca de clases:

    En el menú de la parte superior de Visual Studio haz click en COMPILAR - Compilar solución.

    El proyecto ui4app se encuentra en el directorio C:\Users\tu_nombre_de_usuario\source\repos\ui4app, y el resultado de la compilación está en C:\Users\tu_nombre_de_usuario\source\repos\ui4app\ui4app\bin\Debug, donde encontrarás 3 archivos:

    • ui4app.dll
    • ui4app.dll.config
    • ui4app.pdb

    De estos 3 archivos, el que realmente nos interesa es ui4app.dll.

  2. Crear la aplicación python:

    En el directorio C:\Users\tu_nombre_de_usuario\source\repos\ui4app\ui4app crea un archivo app.py con el siguiente código:

    import clr
    
    clr.AddReference('System.Windows.Forms')
    clr.AddReference('ui4app')
    
    from System.Windows.Forms import *
    from ui4app import Form1
    
    app = Form1()
    
    app.button.Click += lambda *args: MessageBox.Show('Saludos desde Python!')
    
    Application.Run(app)
    

    Ahora añade el archivo al proyecto: En la esquina superior derecha de Visual Studio se encuentra el Explorador de Soluciones. Haz click derecho sobre ui4app y a continuación Agregar - Elemento existente... y selecciona el archivo app.py (si no aparece asegúrate de que el filtro de archivos es Todos los archivos).

    Una vez añadido al proyecto, en el Explorador de Soluciones aparecerá el archivo app.py. Haz click en él y debajo aparecerán sus propiedades. La propiedad Acción de compilación tiene el valor Contenido por defecto, y debes cambiarlo a AdditionalFiles.

    La propiedad Copiar en el directorio de salida debe tener el valor Copiar siempre.

    Recompila el proyecto para que ahora incluya al archivo app.py: COMPILAR - Compilar solución.

    Si no tienes instalado pythonnet instálalo mediante pip install pythonnet.

    Navega al directorio de salida de la compilación C:\Users\tu_nombre_de_usuario\source\repos\ui4app\ui4app\bin\Debug y ejecuta python app.py. Aparecerá el formulario que habíamos creado en Visual Studio, y si haces click en el botón se mostrará el mensaje que acabamos de definir:



AÑADIR PUBLICIDAD A LA APLICACIÓN

En el Explorador de Soluciones haz click derecho sobre ui4app y selecciona Administrar paquetes NuGet...

Haz click en la pestaña Examinar y busca adsjumbo:

Administrador paquetes NuGet - Buscar adsjumbo

Selecciona AdsJumbo.WinForm.WPF y haz click en el botón [Instalar]. Se mostrará un cuadro de diálogo de confirmación: Haz click en [Aceptar].

Una vez instalado AdsJumbo para WinForms vuelve a la pestaña Form1.cs [Diseño] y en el Cuadro de herramientas de la izquierda busca ads: Arrastra el control BannerAds al formulario:

Con el BannerAd seleccionado fíjate en que su propiedad (Name) tiene el valor bannerAds1. Para que este control/widget sea accesible desde python el valor de su propiedad Modifiers debe ser Public (modifícalo porque por defecto tendrá asignado el valor Private).

Recompila el proyecto mediante COMPILAR - Compilar solución, navega al subdirectorio del proyecto ui4app\bin\Debug y ejectua python app.py: Se producirá un System.Threading.ThreadStateException. Para solucionarlo tenemos que hacer una pequeña modificación en app.py:

import clr

clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Threading')
clr.AddReference('ui4app')

from System.Windows.Forms import *
from System.Threading import *
from ui4app import Form1

def main():
    app = Form1()
    app.button.Click += lambda *args: MessageBox.Show('Saludos desde Python!')
    Application.Run(app)

thread = Thread(ThreadStart(main))
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()

Si ahora ejecutas la aplicación mediante python app.py funcionará perfectamente:

O sea que es necesario ejecutar la aplicación en un STA - Single Thread Application para que funcione adsjumbo.

Aunque ahora la aplicación funciona correctamente, todavía no se muestra ningún anuncio, sino el texto AdsJumbo.com Ads. Para que el BannerAds1 que hemos añadido al formulario muestre anuncios y así monetizar la aplicación tienes que conocer tu Application ID en adsjumbo.

Antes de ver cómo obtener el Application ID, si quieres, puedes probar la aplicación con el Application ID de una de mis aplicaciones. Digo "si quieres" porque si lo haces yo me beneficiaría y no estoy aquí para engañar a nadie.

Lo dicho, si quieres probar que todo funciona correctamente antes de continuar modifica el código de app.py para que quede así:

import clr

clr.AddReference('System.Windows.Forms')
clr.AddReference('System.Threading')
clr.AddReference('ui4app')

from System.Windows.Forms import *
from System.Threading import *
from ui4app import Form1

def main():
    app = Form1()
    app.button.Click += lambda *args: MessageBox.Show('Saludos desde Python!')
    app.bannerAds1.ShowAd(468, 60, '9jlipsmdlucw') # MOSTRAR ANUNCIOS EN EL BANNERAD
    Application.Run(app)

thread = Thread(ThreadStart(main))
thread.SetApartmentState(ApartmentState.STA)
thread.Start()
thread.Join()

Recompila la aplicación mediante COMPILAR - Compilar solución y en el directorio de salida de la compilación ejecuta python app.py:

La sentencia app.bannerAds1.ShowAd(468, 60, '9jlipsmdlucw') hace que se muestre un anuncio de dimensiones 468x60. AdsJumbo pone a disposición del desarrollador una colección limitada de dimensiones para los anuncios que puedes añadir a tus aplicaciones.

Para que la aplicación quede decente debes ajustar el tamaño del widget bannerAds1 al del anuncio que quieres mostrar. Si asignamos el valor 468:60 al BannerAd en Visual Studio (y ya de paso ajustamos el tamaño del botón y del formulario) la aplicación luce bastante mejor:

La cadena '9jlipsmdlucw' es el Application ID de una de mis aplicaciones, pero para monetizar tus aplicaciones tienes que obtener tus propios Application ID registrándote en adsjumbo:



OBTENER TUS PROPIOS APPLICATION IDS

Lo primero que tienes que hacer es registrarse en adsjumbo, que es completamente gratis. Una vez registrado, inicia sesión.

En el menú de la izquierda verás lo siguiente:

AdsJumbo Developer Menú

Haz click en Add App e indica el nombre de tu aplicación (pon el nombre que quieras). En el campo Type App selecciona WinForm & WPF (desktop) y haz click en el botón [Add Application]:

AdsJumbo - Add a New App

Finalmente se mostrará el menú de configuración de tu aplicación:

AdsJumbo - Edit App Menú

Sustituye mi Application ID por el tuyo en el archivo app.py. Finalmente haz click en el botón [Request Activation]. Para realizar la activación es necesario que ahora, una vez solicitada la activación, ejecutes tu aplicación mediante python app.py.

La activación que acabas de solicitar puede demorarse unas horas. No tienes que agobiarte ejecutando tu aplicación a ver si ya aparecen los anuncios, ya que una vez se apruebe la activación te llegará un email de confirmación.



DISTRIBUIR LA APLICACIÓN

Puedes utilizar PyInstaller para distribuir tus aplicaciones monetizadas con adsjumbo. Para el ejemplo de esta página navega al directorio C:\Users\tu_nombre_de_usuario\source\repos\ui4app\ui4app\bin\Debug y ejecuta:

pyinstaller --onefile --windowed --add-data "AdsJumboWinForm.dll;." --add-data "ui4app.dll;." app.py

Ni que decir tiene que si no instalaste PyInstaller tienes que hacerlo: pip install pyinstaller.

Se habrá creado el subdirectorio \dist y en su interior encontrarás el archivo app.exe. Haz doble click en él y comprobarás que funciona perfectamente