Formato de dados de anexo

A maneira mais fácil de adicionar anexos de Notificações por perto é pelo Painel de beacon do Google. Outra opção é usar a API Beacon de proximidade e o formato de dados de anexo descrito abaixo.

Os anexos do recurso Notificações próximas precisam usar o namespace com.google.nearby e um tipo que consiste no código do idioma de duas letras e o sufixo -debug opcional.

Os anexos precisam ser formatados usando JSON. Exemplo:

    {
      "title": "Example",
      "url": "https://www.example.com"
    }

O formato JSON permite uma segmentação mais específica, como mostrado abaixo:

    {
      "title": "Example",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startDate": "2017-01-01",
          "endDate": "2017-01-31",
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00",
          "anyOfDaysOfWeek": [1, 2, 3, 4, 5, 6, 7],
          "anyOfAppInstallStates": ["INSTALLED", "NOT_INSTALLED"]
        }
      ]
    }

Em que:

  • title: título do conteúdo. O comprimento de title precisa ter menos que 40 caracteres e menos de 50 caracteres. O ideal é que o usuário tenha uma call-to-action. Por exemplo, Order with your phone, skip the line, Set up your thermostat ou Learn more about sea otters.
  • url: o URL para o aplicativo, site ou serviço.
  • Segmentação: regras opcionais para limitar a visibilidade da notificação com base no contexto do dispositivo.

Formatos de URL

O recurso Notificações por perto é compatível com três formatos de URL:

URL da Web

Um URL da Web é exatamente isso, é apenas um URL normal. Quando um URL da Web é recebido, o usuário recebe uma solicitação para abrir o URL no navegador padrão. Nenhuma configuração especial do app é necessária. Os URLs da Web precisam usar HTTPS e estar formatados como um URL normal:

  https://www.example.com

Caso seu URL da Web não esteja acionando uma notificação, as causas mais prováveis são:

  • Usar HTTP em vez de HTTPS
  • É proibido vincular a loja de aplicativos como play.google.com. A página da Web deve aparecer por conta própria e oferecer informações ou ações úteis diretamente na página de destino.

Intenção do app

Os URLs de intent do app são usados para acionar uma intent em um app. Quando um URL de intent de app é recebido, o app associado responde aos parâmetros contidos no URL, desde que o filtro de intent de app correspondente esteja presente. Se o app não estiver instalado, o usuário será levado à Play Store para fazer a instalação. Depois de o app ser instalado, ele poderá iniciar o app e continuar com o recurso especificado pelo desenvolvedor. Os URLs de intent do app são formatados da seguinte maneira:

  intent://host/path#Intent;scheme=yourscheme;package=com.yourapp.ui;end;

Para saber mais sobre a formatação de URLs de intent, consulte Intents do Android com o Chrome. Os extras de intent não são transmitidos.

Também é possível criar o URL corretamente criando uma intent e usando intent.toUri(Intent.URI_INTENT_SCHEME), conforme mostrado aqui:

    Intent intent = new Intent()
        .setData(new Uri.Builder()
            .scheme("yourscheme")
            .authority("host")
            .appendPath("path")
            .build())
        .setPackage("com.yourapp.ui");
    Log.i(TAG, "Use this intent url: " + intent.toUri(Intent.URI_INTENT_SCHEME));

Intent de app em formato livre

Essa opção deve ser usada para intents do app que não podem corresponder ao esquema, ao caminho e ao formato do nome do pacote. Só use essa opção se você tiver certeza de que o URL da intent está formatado corretamente.

Você pode enviar o usuário a um URL especificado em vez da Play Store caso o app não esteja instalado. Para isso, adicione um parâmetro S.browser_override_url à intent:

intent://host/path#Intent;scheme=yourscheme;package=com.yourapp.ui; \
  S.browser_fallback_url=http%3A%2F%2Fm.yoursite.com%2Fpath%2F%;end;

Segmentação por contexto

Regras

O recurso Notificações por perto é compatível com quatro regras de segmentação:

Data

dateStart e dateEnd são usados para especificar o período em que o anexo ficará visível, no formato ISO 8601. O exemplo a seguir mostra uma notificação em janeiro de 2017:

    {
      "title": "January 2017",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startDate": "2017-01-01",
          "endDate": "2017-01-31"
        }
      ]
    }

Hora do dia

"timeOfDayStart" e "timeOfDayEnd" são usados para especificar o intervalo de tempo diário em que o anexo ficará visível, no formato ISO 8601. O exemplo a seguir mostra uma notificação diária das 9h às 17h:

    {
      "title": "Work time",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00"
        }
      ]
    }

Dia da semana

"anyOfDaysOfWeek" é usado para especificar os dias da semana em que o anexo está visível. O formato é ISO 8601, de 1(segunda-feira) a 7(domingo). O exemplo a seguir mostra uma notificação aos sábados e domingos:

    {
      "title": "Weekends",
      "url": "https://www.example.com",
      "targeting":[
        {
          "anyOfDaysOfWeek": [6, 7]
        }
      ]
    }

Estado de instalação do app

"anyOfAppInstallStates" serve para definir a visibilidade do anexo com base nos estados de instalação do app. Ele só funciona para o URL da intenção do app. O exemplo a seguir mostra uma notificação quando o app não está instalado.

    {
      "title": "App not installed",
      "url": "intent://host/path#Intent;package=com.example",
      "targeting":[
        {
          "anyOfAppInstallStates": ["NOT_INSTALLED"]
        }
      ]
    }

Combinação de regras

Cada anexo pode ter várias regras de segmentação. As regras do mesmo objeto de segmentação são unidas por AND. O exemplo a seguir mostra uma notificação das 9h às 17h aos sábados e domingos.

    {
      "title": "Weekend and work time",
      "url": "https://www.example.com",
      "targeting":[
        {
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00"
          "anyOfDaysOfWeek": [6, 7]
        }
      ]
    }

As regras dos diferentes objetos de segmentação são o togeter de ORed. O exemplo a seguir mostra uma notificação das 9h às 17h, de segunda a sexta-feira, além de um dia inteiro para sábados e domingos.

    {
      "title": "Weekend or work time",
      "url": "https://www.example.com",
      "targeting":[
        {
          "anyOfDaysOfWeek": [6, 7]
        },
        {
          "startTimeOfDay": "9:00",
          "endTimeOfDay": "17:00"
        }
      ]
    }

Adicionar um filtro de intent ao seu app

Os apps precisam ser configurados para processar o esquema, o host e o caminho do URL especificado. Para isso, adicione um elemento no AndroidManifest.xml para declarar um <intent-filter> que corresponda ao esquema, ao host e ao caminho e marcá-lo como visualizável com um filtro de categoria, conforme mostrado abaixo:

  <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
     <!-- both categories below are required -->
     <category android:name="android.intent.category.BROWSABLE"/>
     <category android:name="android.intent.category.DEFAULT"/>
    <data android:host="host"
          android:pathPrefix="/path"
          android:scheme="yourscheme"/>
  </intent-filter>

Para saber mais, consulte Como processar Links do app.