2015-02-09 37 views
0

我已按照谷歌开发人员页面(Gcm implementation)上的说明实施了标准GCM客户端。推送消息在那里工作很好没有问题。但随后我在应用程序中实现了Robospice REST库,GCM停止工作。我相信它不会因为Robospice而起作用,因为一旦我删除了SpiceManager的代码,GCM就开始工作。当我使用Spring模块实现Robospice时,GCM服务停止工作

通过Robospice Spring模块的API调用正常工作。这是我的Robospice服务声明:

enter<receiver 
        android:name="com.clover.spika.enterprise.chat.services.gcm.GcmBroadcastRe ceiver" 
     android:exported="true" 
       android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action  android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action  android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category  android:name="com.clover.spika.enterprise.chat.gcm" /> 
     </intent-filter> 
    </receiver> 

    <service  android:name="com.clover.spika.enterprise.chat.services.gcm.GcmIntentService" /> 
    <service 
      android:name="com.clover.spika.enterprise.chat.services.robospice.Jackson2 SpiceService" 
     android:exported="false" /> 
    <service android:name="com.clover.spika.enterprise.chat.services.custom.PoolingServ ice" /> code here 

这是我自定义的香料服务:

package com.clover.spika.enterprise.chat.services.robospice; 

import java.io.IOException; 
import java.net.URI; 
import java.util.ArrayList; 
import java.util.List; 

import org.springframework.http.ContentCodingType; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.HttpMethod; 
import org.springframework.http.MediaType; 
import org.springframework.http.client.ClientHttpRequest; 
import org.springframework.http.converter.FormHttpMessageConverter; 
import org.springframework.http.converter.HttpMessageConverter; 
import   org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 
import org.springframework.web.client.RestTemplate; 

import android.app.Application; 
import android.app.Notification; 

import com.octo.android.robospice.SpringAndroidSpiceService; 
import com.octo.android.robospice.persistence.CacheManager; 
import  com.octo.android.robospice.persistence.exception.CacheCreationException; 
import  com.octo.android.robospice.persistence.springandroid.json.jackson.JacksonO bjectPersisterFactory; 

public class Jackson2SpiceService extends SpringAndroidSpiceService { 

// private static final int WEBSERVICES_TIMEOUT = 10000; 

@Override 
public RestTemplate createRestTemplate() { 

    RestTemplate restTemplate = new RestTemplate() { 

     @Override 
     protected ClientHttpRequest createRequest(URI url, HttpMethod method) throws IOException { 
      ClientHttpRequest request = super.createRequest(url, method); 
      HttpHeaders headers = request.getHeaders(); 
      headers.setAcceptEncoding(ContentCodingType.ALL); 
      return request; 
     } 
    }; 

    // bug on http connection for Android < 2.2 
    // http://android-developers.blogspot.fr/2011/09/androids-http-clients.html 
    // but still a problem for upload with Spring-android on android 4.1 
    // System.setProperty("http.keepAlive", "false"); 

    // // set timeout for requests 
    // ClientHttpRequestFactory factory = restTemplate.getRequestFactory(); 
    // if (factory instanceof HttpComponentsClientHttpRequestFactory) { 
    // HttpComponentsClientHttpRequestFactory advancedFactory = 
    // (HttpComponentsClientHttpRequestFactory) factory; 
    // advancedFactory.setConnectTimeout(WEBSERVICES_TIMEOUT); 
    // advancedFactory.setReadTimeout(WEBSERVICES_TIMEOUT); 
    // } else if (factory instanceof SimpleClientHttpRequestFactory) { 
    // SimpleClientHttpRequestFactory advancedFactory = 
    // (SimpleClientHttpRequestFactory) factory; 
    // advancedFactory.setConnectTimeout(WEBSERVICES_TIMEOUT); 
    // advancedFactory.setReadTimeout(WEBSERVICES_TIMEOUT); 
    // } 

    MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter(); 
    FormHttpMessageConverter formHttpMessageConverter = new FormHttpMessageConverter(); 
    // StringHttpMessageConverter stringHttpMessageConverter = new 
    // StringHttpMessageConverter(); 

    List<MediaType> supportedMediaTypes = new ArrayList<MediaType>(); 
    supportedMediaTypes.add(MediaType.TEXT_HTML); 
    supportedMediaTypes.add(MediaType.APPLICATION_JSON); 

    // stringHttpMessageConverter.setSupportedMediaTypes(supportedMediaTypes); 
    jsonConverter.setSupportedMediaTypes(supportedMediaTypes); 

    final List<HttpMessageConverter<?>> listHttpMessageConverters = restTemplate.getMessageConverters(); 

    listHttpMessageConverters.add(jsonConverter); 
    listHttpMessageConverters.add(formHttpMessageConverter); 
    // listHttpMessageConverters.add(stringHttpMessageConverter); 

    restTemplate.setMessageConverters(listHttpMessageConverters); 

    return restTemplate; 
} 

@Override 
public CacheManager createCacheManager(Application application) throws CacheCreationException { 

    CacheManager cacheManager = new CacheManager(); 
    JacksonObjectPersisterFactory jacksonObjectPersisterFactory = new  JacksonObjectPersisterFactory(application); 
    cacheManager.addPersister(jacksonObjectPersisterFactory); 

    return cacheManager; 
} 

@Override 
public Notification createDefaultNotification() { 
    return null; 
} 

} 

没有人有任何想法可能是什么问题呢?如果需要,我可以发布其他代码。

+0

这是关于'Robospice',你也可以把你的问题[这里](https://github.com/stephanenicolas/robospice/issues) – bjiang 2015-02-10 18:17:00

回答

0

我已经解决了这个问题,它不是robospice或gcm错误,它是我们的服务器处理中的一件事情。

问题是我们从User-Agent头部读取了一些值,但我并没有意识到这一点,并且我没有将它设置为OkHttp客户端。