是否有 GCM registrationId 模式?

Posted

技术标签:

【中文标题】是否有 GCM registrationId 模式?【英文标题】:Is there a GCM registrationId pattern? 【发布时间】:2012-09-13 09:50:37 【问题描述】:
/**
 * @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 具有正确的形状? 我只想知道它有哪些字符范围,例如最小和最大大小...或任何其他信息...

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

GCM3 返回 registrationId 和其他字符 ex。 ':' 我的数据库中有两种长度。最多 162 个符号和一些 140 个符号。【参考方案2】:

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

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

【讨论】:

以上是关于是否有 GCM registrationId 模式?的主要内容,如果未能解决你的问题,请参考以下文章

GCM每次都发送不同的RegistrationId

在 Android 中升级应用程序后使用 GCM 的 RegistrationId

android Gcm registrationID 与 Parse 等 3rd 方库冲突

如何处理 GCM 更改注册 ID?

两个不同的设备可以有相同的 GCM 注册 ID 吗?

GCM 消息的正确 JSON 格式