在GCM中动态设置SENDER_ID

时间:2013-10-07 14:30:06

标签: android google-cloud-messaging sender-id

我试图通过从服务器获取它来动态设置项目发送者ID,但它会抛出无效的发件人ID异常。我从基础Application类中的服务器获取发送者ID,以确保我在应用程序启动之前得到它,并且我还覆盖了GCMIntentService中的getSenderIds()方法。

    public GCMIntentService() {  
        super();
    }

    @Override
    protected String[] getSenderIds(Context context) {
         String[] ids = new String[1];
         ids[0] = SENDER_ID;
         return ids;
    }  

但是我收到了无效的发件人ID异常。如果有人可以就如何从服务器动态设置发件人ID给我一个明智的意见,我真的很感激。

1 个答案:

答案 0 :(得分:1)

好的,我设法自己做了。我会试着解释一下。所以,首先我编辑了像这样的getSenderIds()方法:

     @Override
    protected String[] getSenderIds(Context context) {

            updateSenderIdTask(context);
            String[] ids = new String[1];
            ids[0] = getSenderId(context);
            return ids;
    }  

以前我已经将ids [0]设置为我将在updateSenderIdTask方法中设置的变量SENDER_ID。抛出了无效的发送方ID异常,因为即使我在基础应用程序类中调用了updateSenderIdTask方法,GCM也会访问SENDER_ID变量。因此,我在getSenderIds覆盖方法中调用了updateSenderTask,以确保在GCM使用它之前从服务器获取id。要仔细检查它,我将ids [0]设置为本地方法getSenderId。以下是它的实现:

    static String getSenderId(Context context) {

            CustomSharedPrefs prefs = CustomSharedPrefs.getInstance(context);
            if (prefs.getString(Constants.SENDER_ID).equals("0")
                    || prefs.getString(Constants.SENDER_ID) == null) {
                updateSenderIdTask(context);
            }
            Log.e("returned sender_id", prefs.getString(Constants.SENDER_ID));
            return prefs.getString(Constants.SENDER_ID);

}  

updateSenderIdTask方法从服务器获取id并将其存储在共享首选项变量中。