是否有GCM registrationId模式?

Seb*_*ber 5 java android android-c2dm google-cloud-messaging

/**
 * @author Sebastien Lorber <i>(lorber.sebastien@gmail.com)</i>
 */
public enum EnumDeviceType {

    ANDROID {
        @Override
        public boolean validateDeviceIdentifier(String deviceIdentifier) {
            Preconditions.checkArgument( !Strings.isNullOrEmpty(deviceIdentifier) );
            return ANDROID_REGISTRATION_ID_PATTERN.matcher(deviceIdentifier).matches();
        }
    },
    IOS {
        @Override
        public boolean validateDeviceIdentifier(String deviceIdentifier) {
            Preconditions.checkArgument( !Strings.isNullOrEmpty(deviceIdentifier) );
            return IOS_DEVICE_TOKEN_PATTERN.matcher(deviceIdentifier).matches();
        }
    },
    ;

    // TODO how do we validate registration Ids
    public static final Pattern ANDROID_REGISTRATION_ID_PATTERN = Pattern.compile(".*");
    // IOS device token is a 64 HEX string
    public static final Pattern IOS_DEVICE_TOKEN_PATTERN = Pattern.compile("[a-fA-F0-9]{64,64}");


    public abstract boolean validateDeviceIdentifier(String deviceIdentifier);


    public boolean isIos() {
        return IOS.equals(this);
    }

    public boolean isAndroid() {
        return ANDROID.equals(this);
    }


}
Run Code Online (Sandbox Code Playgroud)

是否有任何已知的GCM registrationId模式我可以用来验证registrationId的形状是否正确?我只想知道它有哪些字符范围,例如最小和最大尺寸...或任何其他信息......

Hit*_*sit 15

我没有看到任何有关GCM registrationId格式的官方信息,但我已经分析了这些ID的数据库,可以得出以下结论:

  • 在大多数情况下,registrationID的长度等于162个符号,但可以是119个符号的变体,也可能是其他长度;
  • 它只包含这个字符: [0-9a-zA-Z\-\_]*
  • 每个regID包含一个或两个"分隔符": - (减号)或_(下划线)

  • GCM3返回带有其他字符ex的registrationId。':' (2认同)

Tre*_*hns 13

文档未指定任何模式,因此允许任何有效的字符串.格式可能在未来发生变化; 请不要针对任何模式验证此输入,因为如果发生这种情况,这可能会导致您的应用中断.

与"registration_id"字段一样,大小的上限是cookie的最大大小,即4K(4096字节).