Guía de acceso al servicio Push (HarmonyOS)

Como medio para promover y recordar a los usuarios que se utilizan a diario en las operaciones de la aplicación, el envío de mensajes es una buena manera de establecer una interacción y una conexión continuas con los usuarios. Push Kit es una plataforma de envío de mensajes proporcionada por Huawei, que establece un canal de envío de mensajes desde la nube hasta el terminal.Este artículo tiene como objetivo presentar las funciones y la guía de acceso de la versión HarmonyOS (Java).

La función principal de la versión de HarmonyOS (Java) es empujar la barra de notificaciones y transmitir mensajes de forma transparente según el token. El SDK de Java de HarmonyOS proporciona interfaces relacionadas con mensajes push para el desarrollo de su aplicación HarmonyOS, y es adecuado para teléfonos móviles y tabletas.

Mensajes push basados ​​en token push

Puede ingresar el token de inserción del usuario de destino para enviar el mensaje y puede completar hasta 1000 tokens de inserción a la vez.

mensaje transparente

Los mensajes de transferencia son mensajes que la aplicación cliente es responsable de procesar. Después de recibir los datos o las instrucciones enviadas por la nube Push, el dispositivo terminal no muestra directamente los datos, sino que los pasa a la aplicación, que analiza el contenido y desencadena acciones relacionadas (como saltar a páginas web, páginas dentro de la aplicación, etc.). Puede personalizar el estilo del mensaje para enviar mensajes de manera más eficiente y flexible.

La tasa de llegada de mensajes transmitidos de forma transparente se ve afectada por si el sistema Android y las aplicaciones residen en segundo plano, y el servicio push no garantiza una alta tasa de llegada de mensajes transmitidos de forma transparente.

Escenarios comunes para la transmisión transparente de mensajes: llamadas VoIP, transmisiones de voz, notificaciones de interacción con amigos, etc.

Preparación para el desarrollo

Para preparativos de desarrollo específicos, consulte el sitio web oficial .

desarrollo de aplicaciones

Obtener token de inserción

El token es un token push. El token de cada aplicación en cada dispositivo es único. El cliente llama al método getToken para solicitar el token de la aplicación del servidor Push. Puede enviar mensajes a la aplicación en función del token devuelto por el servidor Push. Cuando el método getToken devuelve vacío, el valor del token se puede obtener a través del método onNewToken .

Se recomienda informar el Push Token a su propio servidor de aplicaciones y actualizar la lista de tokens periódicamente. Puede llamar a la API de mensajes descendentes para enviar mensajes en lotes en función de estos tokens.

  1. Cree un nuevo hilo y llame al método getToken para obtener el Push Token (se recomienda llamar al método getToken en la primera Habilidad después de que se inicie la aplicación).
public class TokenAbilitySlice extends AbilitySlice {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234, 
"TokenAbilitySlice");
    private void getToken() {
        // 创建新线程
        new Thread("getToken") {
            @Override
            public void run() {
                try {
                    // 从agconnect-services.json文件中读取client/app_id
                    String appId = "your APP_ID";
                    // 输入token标识"HCM"
                    String tokenScope = "HCM";
                    // 获取Push Token
                    String token = HmsInstanceId.getInstance(getAbility().getAbilityPackage(), TokenAbilitySlice.this).getToken(appId, tokenScope);
                } catch (ApiException e) {
                    // 获取Push Token失败时,打印错误码
                    HiLog.error(LABEL_LOG, "get token failed, the error code is %{public}d", e.getStatusCode());
                }
            }
        }.start();
    }
}
  1. En su servicio ( que ha heredado HmsMessageService ), anule el método onNewToken y devuélvalo con el método onNewToken cuando cambie el Token .
public class DemoHmsMessageServiceAbility extends HmsMessageService {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234, "DemoHmsMessageServiceAbility");

    @Override
    // 获取Token
    public void onNewToken(String token) {
        HiLog.info(LABEL_LOG, "onNewToken called, token:%{public}s", token);
    }

    @Override
    // 获取Token失败,打印错误码
    public void onTokenError(Exception exception) {
        HiLog.error(LABEL_LOG, "get onNewtoken error, error code is %{public}d", ((ZBaseException)exception).getErrorCode());
    }
}

Obtener datos de mensajes transparentes

En su servicio ( que ha heredado HmsMessageService ), anule el método onMessageReceived, siempre que envíe un mensaje transparente al dispositivo terminal, obtendrá el contenido del mensaje transparente.

public class DemoHmsMessageServiceAbility extends HmsMessageService {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234, 
"DemoHmsMessageServiceAbility");
    @Override
    public void onMessageReceived(ZRemoteMessage message) {
        // 打印消息的内容字段
        HiLog.info(LABEL_LOG, "get token, %{public}s", message.getToken());
        HiLog.info(LABEL_LOG, "get data, %{public}s", message.getData());

        ZRemoteMessage.Notification notification = message.getNotification();
        if (notification != null) {
            HiLog.info(LABEL_LOG, "get title, %{public}s", notification.getTitle());
            HiLog.info(LABEL_LOG, "get body, %{public}s", notification.getBody());
        }
    }
}

Enviar un mensaje

• Puede iniciar sesión en el sitio web de AppGallery Connect para enviar mensajes Para obtener más información, consulte Mensajes push de la aplicación HarmonyOS.

• Puede usar la API del lado del servidor para enviar mensajes a la aplicación:

  1. Su servidor llama a la interfaz del servidor de ID de HUAWEI ( https://oauth-login.cloud.huawei.com/oauth2/v3/token) para solicitar un token de certificado. Un ejemplo de solicitud es el siguiente:
POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=<客户端ID>&client_secret=<客户端密钥>

Un ejemplo de respuesta es el siguiente:

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store

{
    "access_token": "<返回的Access Token>",
    "expires_in": 3600,
    "token_type": "Bearer"
}
  1. Su servidor llama a la API para enviar mensajes, y el ejemplo de solicitud es el siguiente.

URL de la publicación HTTPS:

POST https://push-api.cloud.huawei.com/v1/clientid/messages:send

Ejemplo de encabezado de solicitud:

Content-Type: application/json; charset=UTF-8
Authorization: Bearer CF3Xl2XV6jMK************************DgAPuzvNm3WccUIaDg==

Ejemplo del cuerpo del mensaje de solicitud (mensaje en la barra de notificaciones):

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "title": "test title",
                "body": "test body",
                "click_action": {
                    "type": 3
                }
            }
        },
        "token": ["pushtoken1"]
    }
}

Acción de mensaje de clic personalizado

Puede personalizar la acción de hacer clic en el mensaje en la barra de notificaciones, por ejemplo: abrir la página de inicio de la aplicación, abrir la URL de la página web y abrir la página personalizada de la aplicación.

Abre la página de inicio de la aplicación

• Puede enviar notificaciones a través de AppGallery Connect , configurar la acción de notificación de clic para abrir la aplicación y la página de la aplicación para que sea la página de inicio .

• Puede enviar mensajes a través de la API del servidor:

El campo click_action se incluye en el cuerpo del mensaje y el valor de type es 3, lo que indica que la página de inicio de la aplicación se abre después de hacer clic en el mensaje.

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "title": "test title",
                "body": "test body",
                "click_action": {
                    "type": 3
                }
            }
        },
        "token": ["pushtoken1"]
    }
}

abrir la página web

• Puede enviar notificaciones a través de AppGallery Connect y configurar la acción de notificación de clic para abrir una página web .

• Puede enviar mensajes a través de la API del servidor:

El campo click_action se incluye en el cuerpo del mensaje y el valor de type es 2, lo que indica que la página web se abre después de hacer clic en el mensaje.

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "title": "test title",
                "body": "test body",
                "click_action": {
                    "type": 2,
                    "url":"https://www.huawei.com"
                }
            }
        },
        "token": ["pushtoken1"]
    }
}

Abra la página de personalización de la aplicación.

  1. La aplicación cliente primero crea una página personalizada (tome "MyActionAbility" como ejemplo) y agrega el campo de habilidades de la habilidad al archivo "config.json" en el directorio "entry/src/main" de su proyecto. El valor de las entidades es "entity.system.default" y no se puede cambiar, y usted puede personalizar el valor de las acciones (tome "com.test.myaction" como ejemplo).
{
    "orientation": "unspecified",
    "name": "com.test.java.MyActionAbility",
    "icon": "$media:icon",
    "description": "$string:myactionability_description",
    "label": "$string:entry_MyActionAbility",
    "type": "page",
    "launchType": "standard",
    "skills": [    
        {
            "entities": ["entity.system.default"],
            "actions": ["com.test.myaction"]    
        } 
    ]
}
  1. Puede enviar mensajes a través de AppGallery Connect , configurar la acción de notificación de clic para abrir la aplicación y la página de la aplicación en una página de acción personalizada (para la acción, ingrese el valor de las acciones definidas en el paso anterior).

También puede enviar mensajes a través de la API del lado del servidor. El cuerpo del mensaje contiene los campos click_action y action . El valor de type es 1, lo que significa que la página personalizada de la aplicación se abrirá después de hacer clic en el mensaje. El valor de action es el valor de las acciones definidas en el paso anterior.

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "title": "test title",
                "body": "test body",
                "click_action": {
                    "type": 1,
                    "action":"com.test.myaction"
                }
            }
        },
        "token": ["pushtoken1"]
    }
}

pasar datos

Cuando envía un mensaje, puede llevar el campo de datos.Cuando el usuario hace clic en el mensaje, los datos en los datos se pasan a la aplicación cliente a través del siguiente método.

  1. Llevar el campo de datos al empujar el mensaje:

• Enviar mensajes a través de AppGallery Connect y establecer pares clave-valor personalizados .

• Empuje el mensaje a través de la API del servidor y el campo de datos se incluye en el cuerpo del mensaje.

{
    "validate_only": false,
    "message": {
        "android": {
            "notification": {
                "title": "test title",
                "body": "test body",
                "click_action": {
                    "type": 1,
                    "action":"com.test.myaction"
                }
            },
            "data": "{'key_data':'value_data'}"
        },
        "token": ["pushtoken1"]
    }
}
  1. En el desarrollo de la aplicación cliente, haga clic en el mensaje para saltar a la página para obtener la función de campo de datos Aquí, haga clic en el mensaje para saltar a la página de inicio de la aplicación (MainAbilitySlice) para obtener el campo de datos como ejemplo.
public class MainAbilitySlice extends AbilitySlice {
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(HiLog.LOG_APP, 0xD001234, "myDemo");
    @Override    
    public void onStart(Intent intent) {        
        HiLog.info(LABEL_LOG, "MainAbilitySlice get started...");
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        // 调用解析方法
        parseIntent(intent);
    }

    private void parseIntent(Intent intent){
        if (intent == null){return;}    
        IntentParams intentParams = intent.getParams();
        if (intentParams == null) {return;} 
        // 获取data字段中的键值对   
        String key = "key_data";    
        Object obj = intentParams.getParam(key);
        try{
            // 打印data字段中的键值对        
            HiLog.info(LABEL_LOG, "my key: %{public}s, my value: %{public}s", key, obj);    
        }catch (Exception e){
            HiLog.info(LABEL_LOG, "catch exception : " + e.getMessage());    
        }
    }
}  

Conoce más detalles>>

Visite el sitio web oficial de Huawei Push Service Alliance

Obtenga el documento de orientación para el desarrollo del servicio push de Huawei

Visite el sitio web oficial de HMS Core Alliance

Obtenga el documento de guía de desarrollo de HMS Core

Síganos y conozca la última información técnica de HMS Core por primera vez ~

Supongo que te gusta

Origin blog.csdn.net/HUAWEI_HMSCore/article/details/131227551
Recomendado
Clasificación