VISITAS:

lunes, 17 de noviembre de 2014

Notificaciones push para Android con Corona SDK y Gamethrive


NOTA: Utilizaré el servicio GameThrive, el cuál tiene la ventaja de ser gratuito, ser compatible con notificaciones Android e iOS, y además tiene un plugin gratuito para Corona SDK.


1. Registrarse en Gamethrive (si no estamos registrados previamente).

https://gamethrive.com/

2. Crear un projecto con notificaciones en Google

https://console.developers.google.com/project

Pulsar en "Crear proyecto"

Dar un nombre al proyecto.
El ID del proyecto da igual.
Pulsar el botón "Crear" (puede tardar casi un minuto en crear el proyecto).

En el frame de la izquierda, pulsar en "Descripción general".
Arriba aparece el número del proyecto (#PN). Este dato será necesario para enviar notificaciones a la aplicación.

En el  frame de la izquierda, pulsar en APIs y autenticación. Después pulsar en APIs
Buscar "Google Cloud Messaging for Android" y pulsar en el botón a la derecha de esta línea para activar el servicio.
Una vez activado, aparecerá arriba en la pantalla con los demás servicios activados.

En el frame de la izquierda, pulsar en APIs y autenticación. Después pulsar en Credenciales.
Pulsar el botón "Crear clave nueva".
Pulsar en "Clave de servidor"
No escribir nada en el textbox y pulsar el botón "Crear".
La clave de la API (#KEY) la necesitaremos después.

3. Crear una aplicación en Gamethrive

Entrar en la cuenta de Gamethrive que hemos creado en el apartado 1.

Ir al panel de aplicaciones.

Pulsar el botón "Add a new app"
Dar un nombre a la aplicación (se recomienda poner el mismo nombre que se puso en Google, para evitar confusiones).
Pulsar el botón "Submit".

En el frame izquierdo, pulsar "Application Settings"
Se muestran App ID/Key (#APPID) y REST API Key (#REST) que se utilizarán después.
En la sección "Platforms", pulsar el botón "Configure" en la línea de "Google Play".
Copiar la clave que se generó en Google al final del apartado 2 (#KEY).
Pulsar el botón "Save".
Aparecerá la línea "Google Play" como "Active"

4. Corona build.settings

Dentro de settings, añadir el siguiente elemento, por ejemplo, después del elemento orientation:

plugins =
{
    ["plugin.GameThrivePushNotifications"] =
    {
        publisherId = "com.gamethrive",
    },
    ["plugin.google.play.services"] =
    {
            publisherId = "com.coronalabs",
            supportedPlatforms = { android=true },
    },
},

También dentro de settings, hay que poner la siguiente sección:

        android =
        {
            permissions =
            {
                { name = ".permission.C2D_MESSAGE", protectionLevel = "signature" },
            },
            usesPermissions =
            {
                "android.permission.INTERNET",
                "android.permission.GET_ACCOUNTS",
                "android.permission.RECEIVE_BOOT_COMPLETED",
                "com.google.android.c2dm.permission.RECEIVE",
                ".permission.C2D_MESSAGE",
            },
        },


4. Corona config.lua

Dentro de application, añadir el siguiente elemento, por ejemplo, después del elemento content:

        notification = {
            google = { projectNumber = "#PN" },
        }, 

5. Corona main.lua

Al principio del fichero main.lua:


-- Esta función es llamada cuando el usuario abre una notificación o cuando la aplicación está abierta y activa.
function DidReceiveRemoteNotification(message, additionalData, isActive)
    if (additionalData) then
        if (additionalData.discount) then
            native.showAlert( "Discount!", message, { "OK" } )
            -- 
        elseif(additionalData.bonusCredits) then
            native.showAlert( "Bonus Credits!", message, { "OK" } )
            -- 
        elseif(additionalData.actionSelected) then -- Interactive notification button pressed
            native.showAlert("Button Pressed!", "ButtonID:" .. additionalData.actionSelected, { "OK"} )
        end
    end
end

local GameThrive = require("plugin.GameThrivePushNotifications")
GameThrive.Init("poner aquí #APPID de gamethrive", "poner aquí #PN de google", DidReceiveRemoteNotification)

La función DidReceiveRemoteNotification se ejecutará cuando el usuario abra una notificación.
Casos:
  • El móvil está apagado: cuando se encienda el móvil aparecerá la notificación y al pulsarla, se abrirá la aplicación y se ejecutará esta función.
  • La aplicación está abierta y activa (foreground): se invocará esta función, aunque no aparecerá el icono de la notificación
  • Si la aplicación no está activa: aparecerá el icono de la notificación y cuando el usuario lo pulse, se abrirá la aplicación y se ejecutará esta función.
Parámetros de esta función:
  • message: es el mensaje de la notificación.
  • additionalData: son datos adicionales que podemos añadir a la notificación (ya se envíe desde la web de gamethrive o bien a través del API de gamethrive).
  • isActive: indica (true o false) si la aplicación estaba activa.

6. Icono de notificación

El icono de notificación debe ser un fichero en formato PNG, con fondo transparente y color blanco.
Se debe crear un icono para cada una de las distintas densidades de pantalla y otro conjunto de iconos para Android API v11. En resumen, hay que crear los siguientes iconos:


  • IconNotificationDefault-ldpi.png ---> 18x18 px
  • IconNotificationDefault-ldpi-v11.png ---> 18x18 px
  • IconNotificationDefault-mdpi.png ---> 24x24 px
  • IconNotificationDefault-mdpi-v11.png ---> 24x24 px
  • IconNotificationDefault-hdpi.png ---> 36x36 px
  • IconNotificationDefault-hdpi-v11.png ---> 36x36px
  • IconNotificationDefault-xhdpi.png ---> 48x48 px
  • IconNotificationDefault-xhdpi-v11.png ---> 48x48 px

Hay que tener cuidado de dejar al menos un pixel en ldpi, un pixel en mdpi, un pixel en hdpi y dos pixel en xhdpi, como borde entre la imagen y el icono.