2014-11-03 75 views
0

GCM推送通知我想为下面的问题的解决方案:根据不同的情况

我想发送特定于用户通知喜欢谢谢消息一个用户名和作业贴说其他用户。我正在寻找一种方式,以便我可以根据用户ID和注册ID发送单独的消息。

我尝试了以下方法,即。

当新用户注册时,那个用户的userid会在数据库上创建。我想如果我也同时创建一个注册ID,那么我可以将它保存在服务器上的一个单独的表中。其中将包含用户ID和registration_id和设备类型

但我注意到,在GCM注册时它是异步任务,所以我获得它,但直到用户获得注册的ID仍然为空。所以它无法进入数据库。

如果有人对这个问题有看法。或者也解决了类似的问题。然后让我知道。

感谢您的阅读。

+0

Gcm注册需要时间,因为它调用web服务到谷歌注册。因此,在用户获得注册之前,注册ID将为空,因此您可以在启动屏幕中或在gcm注册获得注册时间的地方将gcm注册电话 – 2014-11-03 05:03:05

回答

0

其实问题是GCM注册经常需要一段时间注册。因此,有一种简单的方法可以将您的ID注册到数据库中。其一是,如果你使用的启动画面在你的应用程序,然后试图为GCM在那里注册,并在您GCMIntentService的onRegistered方法保存registrationId偏好这样

@Override 
protected void onRegistered(Context arg0, String regId) { 
    Log.v("registrationId", regId); 
    prefs = getSharedPreferences("filename", 0); 
    prefs.edit().putString("regid", regId).commit(); 
} 

现在在登录的时候,你应该尝试从您存储在onRegistered方法中的首选项获取您的registrationId。但仍有1-2%的机会让你不会在这里注册。因此,您可以为GCM注册创建一个单独的api,您将在LoginActivity旁边的Activity中((如果您的regid没有在Login time注册))获取注册到您的数据库的id。其次,如果您没有使用启动画面,那么您必须为GCM注册制作单独的api,因为在登录期间您有更多的机会不会获得您的registrationId。