android - C2DMメッセージングは​​ローカルサーバーでは機能しますが、本番環境では機能しません(Google App Engine)

android google-app-engine gwt google-cloud-datastore android-c2dm

したがって、C2DMメッセージングを使用するアプリケーションがあります。私のコンピューターでホストされている場合、ローカルサーバーモードで完全に動作しています。ただし、アプリケーションをApp Engineにデプロイすると、機能しなくなります。私は髪を抜いてきましたが、これがなぜなのか理解できません。

1.5.2および1.5.3 App Engine SDKを使用して、Eclipseで2.3および2.4 GWTプラグインに対してビルドを試みました。それらのどれも動作しないようです。電話をうまく登録できますが、電話にC2DMメッセージが届いていないようです。
答え
さて、調べてみたところ、Googleから提供されたコードにバグがあることがわかりました。ローカルサーバーでは、登録データのユーザー名をすべて小文字で保存します(MyEmail@bomb.com-> myemail@bomb.com)。本番サーバーでは、メールの保存にすべて小文字を使用するわけではありません。次のメソッドはデータストアにクエリを送信し、すべて小文字で引数としてメールを提供します。

解決策は、指定された行をコメント化するか、登録時に電子メールをデータストアに保存するときにすべて小文字を使用する方法を見つけます。

/**
 * Helper function - will query all registrations for a user.
 */
@SuppressWarnings("unchecked")
public static List<DeviceInfo> getDeviceInfoForUser(String user) {
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        // Canonicalize user name
----->  user = user.toLowerCase(Locale.ENGLISH);
        Query query = pm.newQuery(DeviceInfo.class);
        query.setFilter("key >= '" +
                user + "' && key < '" + user + "$'");
        List<DeviceInfo> qresult = (List<DeviceInfo>) query.execute();
        // Copy to array - we need to close the query
        List<DeviceInfo> result = new ArrayList<DeviceInfo>();
        for (DeviceInfo di : qresult) {
            result.add(di);
        }
        query.closeAll();
        log.info("Return " + result.size() + " devices for user " + user);
        return result;
    } finally {
        pm.close();
    }
}
関連記事

android - TTS出力を16または8kHzに設定します

javascript - Android-外部WebページにJavaScriptをロードして実行する

android - バックグラウンドスレッドでの重い計算

android - 全画面モードのIntent Android YouTube Playerアプリ

android - 異なるデータで同じアクティビティ(同じレイアウト)を呼び出す方法は?

android - Androidのカスタムギャラリービューに説明を追加する

android - Androidでは、ImageViewに子ビューを追加できますか?

java - 断片的にキーが押されたことを検出できますか

android - オートコンプリートテキストビューを空に保つ方法(入力する準備ができています)?

java - Androidの一意のID [重複]