Creating Device Group Filters

Nota

Adobe consiglia di utilizzare SPA Editor per i progetti che richiedono il rendering lato client basato sul framework di applicazioni a pagina singola (ad es. React). Per saperne di più.

Create un filtro gruppo di dispositivi per definire un set di requisiti di funzionalità dei dispositivi. Create tutti i filtri necessari per eseguire il targeting dei gruppi necessari di funzionalità dei dispositivi.

Progettate i filtri in modo da poter utilizzare combinazioni di essi per definire i gruppi di funzionalità. In genere, esiste una sovrapposizione delle capacità di diversi gruppi di dispositivi. Di conseguenza, potete utilizzare alcuni filtri con più definizioni di gruppi di dispositivi.

Dopo aver creato un filtro, potete usarlo nella configurazione del gruppo.

Classe Java Filter

Un filtro gruppo di dispositivi è un componente OSGi che implementa l’interfaccia com.day.cq.wcm.mobile.api.device.DeviceGroupFilter . Quando viene distribuita, la classe di implementazione fornisce un servizio filtro disponibile per le configurazioni di gruppi di dispositivi.

La soluzione descritta in questo articolo utilizza il plugin Apache Felix Maven SCR per facilitare lo sviluppo del componente e del servizio. Di conseguenza, la classe Java di esempio utilizza le annotazioni @Componente @Service . La classe ha la struttura seguente:

package com.adobe.example.myapp;

import java.util.Map;

import com.day.cq.wcm.mobile.api.device.DeviceGroup;
import com.day.cq.wcm.mobile.api.device.DeviceGroupFilter;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;

@Component(metatype = false)
@Service 
public class myDeviceGroupFilter implements DeviceGroupFilter {
 
       public String getDescription() {
  return null;
 }

 public String getTitle() { 
  return null;
 }

 public boolean matches(DeviceGroup arg0, String arg1, Map arg2) { 
  return false;
 }

}

È necessario fornire il codice per i metodi seguenti:

  • getDescription: Restituisce la descrizione del filtro. La descrizione viene visualizzata nella finestra di dialogo di configurazione del gruppo di dispositivi.
  • getTitle: Restituisce il nome del filtro. Il nome viene visualizzato quando si selezionano i filtri per il gruppo di dispositivi.
  • matches: Determina se il dispositivo dispone delle funzionalità richieste.

Specificare il nome e la descrizione del filtro

I getTitle metodi e getDescription i metodi restituiscono rispettivamente il nome e la descrizione del filtro. Il codice seguente illustra l'implementazione più semplice:

public String getDescription() {
    return "An example device group filter";
}

public String getTitle() { 
 return "myFilter";
}

La codifica rigida del testo di nome e descrizione è sufficiente per gli ambienti di authoring in lingue diverse. Si consideri l'esternalizzazione delle stringhe per uso multilingue, o per abilitare la modifica delle stringhe senza ricompilare il codice sorgente.

Valutazione In Base Ai Criteri Di Filtro

La matches funzione restituisce true se le capacità del dispositivo soddisfano tutti i criteri del filtro. Valutare le informazioni fornite negli argomenti del metodo per determinare se il dispositivo appartiene al gruppo. I seguenti valori sono forniti come argomenti:

  • Un oggetto DeviceGroup
  • Nome dell’agente utente
  • Un oggetto Map che contiene le funzionalità del dispositivo. Le chiavi Mappa sono i nomi delle funzionalità WURFL™ e i valori sono i valori corrispondenti del database WURFL™.

L'interfaccia com.day.cq.wcm.mobile.api.devicspecs.DeviceSpecsConstants contiene un sottoinsieme dei nomi delle funzionalità WURFL™ nei campi statici. Utilizzate queste costanti di campo come chiavi per il recupero dei valori dalla Mappa delle funzionalità dei dispositivi.

Ad esempio, il seguente esempio di codice determina se il dispositivo supporta CSS:

boolean cssSupport = true;
cssSupport = NumberUtils.toInt(capabilities.get(DeviceSpecsConstants.DSPEC_XHTML_SUPPORT_LEVEL)) > 1;

Il org.apache.commons.lang.math pacchetto fornisce la NumberUtils classe.

Nota

Assicurarsi che il database WURFL™ distribuito per AEM includa le funzionalità utilizzate come criteri di filtro. (Vedere Rilevamento dispositivo.)

Esempio Di Filtro Per Le Dimensioni Dello Schermo

L'implementazione di esempio DeviceGroupFilter che segue determina se la dimensione fisica del dispositivo soddisfa i requisiti minimi. Questo filtro consente di aggiungere granularità al gruppo di dispositivi touch. Le dimensioni dei pulsanti nell’interfaccia utente dell’applicazione devono essere uguali, indipendentemente dalle dimensioni fisiche dello schermo. Le dimensioni di altri elementi, come il testo, possono variare. Il filtro abilita la selezione dinamica di un particolare CSS che controlla le dimensioni degli elementi dell'interfaccia utente.

Questo filtro applica i criteri di dimensione ai nomi delle proprietà physical_screen_height e physical_screen_width WURFL™.

package com.adobe.example.myapp;

import java.util.Map;

import com.day.cq.wcm.mobile.api.device.DeviceGroup;
import com.day.cq.wcm.mobile.api.device.DeviceGroupFilter;

import org.apache.commons.lang.math.NumberUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;

@Component(metatype = false)
@Service
@SuppressWarnings("unused")
public class ScreenSizeLarge implements DeviceGroupFilter {
    private int len=400;
    private int wid=200;
    public String getDescription() {

        return "Requires the physical size of the screen to have minimum dimensions " + len + "x" + wid+".";
    }

    public String getTitle() {
        return "Screen Size Large ("+len + "x" + wid+")";
    }

    public boolean matches(DeviceGroup deviceGroup, String userAgent,
            Map<String, String> deviceCapabilities) {

        boolean longEnough=true;
        boolean wideEnough=false;
        int dimension1=NumberUtils.toInt(deviceCapabilities.get("physical_screen_height"));
        int dimension2=NumberUtils.toInt(deviceCapabilities.get("physical_screen_width"));
        if(dimension1>dimension2){
            longEnough=dimension1>=len;
            wideEnough=dimension2>=wid;
        }else{
            longEnough=dimension2>=len;
            wideEnough=dimension1>=wid;
        }

        return longEnough && wideEnough;
    }
}

Il valore String restituito dal metodo getTitle viene visualizzato nell'elenco a discesa delle proprietà del gruppo di dispositivi.

filteradtogroup

I valori String restituiti dai metodi getTitle e getDescription sono inclusi nella parte inferiore della pagina di riepilogo del gruppo di dispositivi.

filterdescription

Il file Maven POM

Il seguente codice POM è utile se utilizzate Maven per creare le applicazioni. Il POM fa riferimento a diversi plug-in e dipendenze richiesti.

Plug-in:

  • Plug-in Apache Maven Compiler: Compila le classi Java dal codice sorgente.
  • Plug-in Apache Felix Maven Bundle: Crea il bundle e il manifesto
  • Plugin Apache Felix Maven SCR: Crea il file descrittore del componente e configura l’intestazione del manifesto service-component.

Dipendenze:

  • cq-wcm-mobile-api-5.5.2.jar: Fornisce le interfacce DeviceGroup e DeviceGroupFilter.

  • org.apache.felix.scr.annotations.jar: Fornisce le annotazioni dei componenti e dei servizi.

Le interfacce DeviceGroup e DeviceGroupFilter sono incluse nel bundle API WCM Mobile Day Communique 5. Le annotazioni Felix sono incluse nel bundle Apache Felix Dichiarative Services. È possibile ottenere questo file JAR dal repository pubblico Adobe.

Al momento dell'authoring, 5.5.2 è la versione del bundle API WCM Mobile che si trova nell'ultima versione di AEM. Utilizzate console Web di Adobe (http://localhost:4502/system/console/bundles) per verificare che si tratti della versione bundle distribuita nell'ambiente in uso.

POM: (Il POM utilizzerà un ID e una versione groupId diversi.)

<project xmlns="https://maven.apache.org/POM/4.0.0"
        xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.adobe.example.myapp</groupId>
      <artifactId>devicefilter</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>my app device filter</name>
      <url>https://dev.day.com/docs/en/cq/current.html</url>
  <packaging>bundle</packaging>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-scr-plugin</artifactId>
            <executions>
                  <execution>
                    <id>generate-scr-scrdescriptor</id>
                    <goals>
                          <goal>scr</goal>
                    </goals>
                  </execution>
            </executions>
          </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>1.4.3</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Export-Package>com.adobe.example.myapp.*;version=${project.version}</Export-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
     <dependency>
         <groupId>com.day.cq.wcm</groupId>
         <artifactId>cq-wcm-mobile-api</artifactId>
         <version>5.5.2</version>
         <scope>provided</scope>
     </dependency>
     <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.scr.annotations</artifactId>
        <version>1.6.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
</project>

Aggiungete il profilo che la sezione Acquisizione del plug-in di Content Package Maven fornisce al file delle impostazioni del cielo per utilizzare il repository del Adobe pubblico.

In questa pagina