有GCM registrationId的模式吗?

7
/**
 * @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);
    }


}

有没有已知的GCM registrationId模式可以用来验证应用程序的registrationId是否具有正确的形状?例如,我只想知道它所包含的字符范围、最小和最大长度是多少,或者任何其他信息...

2个回答

17

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

  • 大多数情况下,注册ID的长度为162个字符,但也可以变化为119 个字符,可能是其他长度;
  • 它只包含这些字符:[0-9a-zA-Z\-\_]*
  • 每个注册ID都包含一个或两个"定界符":-(减)或_(下划线)

3
GCM3 返回带有其他字符(例如 ":")的 registrationId。 - skyman
1
我在数据库中有两种长度。大多数为162个符号,而有些为140个符号。 - derjohng

16

文档没有指定任何模式,因此允许使用任何有效字符串。格式可能会在未来更改;请不要根据任何模式验证此输入,因为如果发生更改,这可能会导致您的应用程序出现问题。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接