docs: private void doGCMRefresh() {
          final DeviceInfo _deviceInfo = this.deviceInfo;
          postAsyncSafely("GcmManager#doGCMRefresh", new Runnable() {
              @Override
              public void run() {
                  try {
                      if(getConfig().isAnalyticsOnly()){
                          getConfigLogger().debug(getAccountId(),"Instance is set for Analytics only, will not request push token");
                          return;
                      }
                      String freshToken = GCMGetFreshToken(_deviceInfo.getGCMSenderID());
                      if (freshToken == null) return;
  
                      cacheGCMToken(freshToken);
  
                      // better safe to always force a push from here
                      pushGCMDeviceToken(freshToken, true, true);
  
                      try {
                          deviceTokenDidRefresh(freshToken, PushType.GCM);
                      } catch (Throwable t) {
                          //no-op
                      }
                  } catch (Throwable t) {
                      getConfigLogger().verbose(getAccountId(),"GcmManager: GCM Token error", t);
                  }
              }
          });
      }