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);
    }


}

アプリケーションでregistrationIdの形状が正しいことを検証するために使用できるGCMregistrationIdの既知のパターンはありますか?私はそれが持っている文字の範囲を知りたいのですが、それは例の最小サイズと最大サイズです...または他の情報...

4

2 に答える 2

17

GCMのregistrationIdの形式に関する公式情報は見ていませんが、そのようなIDのデータベースを分析したところ、次の結論を出すことができます。

  • ほとんどの場合、registrationIDの長さは162シンボルですが、 119シンボルのバリエーションである可能性があり、他の長さの場合もあります。
  • これは、この文字のみで構成されています。[0-9a-zA-Z\-\_]*
  • すべてのregIDには、「区切り文字」の1つまたは両方が含まれています:-(マイナス)または_(下線)
于 2012-09-13T11:15:36.087 に答える
14

ドキュメントにはパターンが指定されていないため、有効な文字列を使用できます。形式は将来変更される可能性があります。この入力をパターンに対して検証しないでください。これが発生すると、アプリが破損する可能性があります。

「registration_id」フィールドと同様に、サイズの上限はCookieの最大サイズである4K(4096バイト)です。

于 2012-09-19T20:27:14.810 に答える