2012-06-25 3 views
0

사용자 이름과 장치 토큰을 사용하여 stackmob에 장치를 등록합니다. 나는 유효한 토큰을 c2dn에서 가져 와서 해당 사용자를 위해 db에 저장하고 stackmob에 등록하는 동안이 매개 변수를 사용하고 있습니다. dev 환경에서 잘 동작하지만 동일한 코드 조각은 장치를 등록하는 동안 401을 제공합니다. 제발 이걸 제안 해주세요. 이것에 대한장치를 등록하는 중에 Stackmob이 401 오류를 표시합니다.

코드는 다음과 같습니다 :

public String registerWithNotificationServiceProvider(final String userName, final String deviceToken)  throws UserException 

     { 
    if (userName.isEmpty() || deviceToken.isEmpty()) { 
     throw new UserException(ResponseCodes.STATUS_BAD_REQUEST, "User Name or device  token is null",## Heading ##     "label.invalid.user.device.details"); 
    } 
    StackMobRequestSendResult deviceRegisterResult = null; 
    deviceRegisterResult = StackMob.getStackMob().registerForPushWithUser(userName, deviceToken, 
      new StackMobRawCallback() { 
       @Override 
       public void done(HttpVerb requestVerb, String requestURL, 
         List<Map.Entry<String, String>> requestHeaders, String requestBody, 
         Integer responseStatusCode, List<Map.Entry<String, String>> responseHeaders, 
         byte[] responseBody) { 
        String response = new String(responseBody); 
        logger.info("request Body is " + requestBody); 
        logger.info("request Url is " + requestURL); 
        for(Map.Entry<String, String> entry : requestHeaders){ 
         logger.info("Request Header is " + entry.getKey()); 
         logger.info("Request Header content is " + entry.getValue()); 
        } 
        for(Map.Entry<String, String> entry : responseHeaders){ 
         logger.info("Response Header is " + entry.getKey()); 
         logger.info("Response Header content is " + entry.getValue()); 
        } 
        logger.info("response while registering the device is " + response); 
        logger.info("responseCode while registering device " + responseStatusCode); 
       } 
      }); 
    String status = null; 
    if (deviceRegisterResult.getStatus() != null) { 
     status = deviceRegisterResult.getStatus().name(); 
     logger.debug("For user : " + userName + " Status for registering device is " + status); 
    } 
    if (Status.SENT.getStatus().equalsIgnoreCase(status)) { 
     return Status.SUCCESS.getStatus(); 
    } else { 
     return Status.FAILURE.getStatus(); 
    } 

} 

답변

1

때 API 키와 비밀을 가진 당신이 설정하여 StackMob 객체 프로덕션 키와 암호를 사용하여 apiVersion 1을 사용하는 것을 기억 하는가? 그것이 가장 큰 문제입니다. .

StackMobCommon.API_KEY = KEY; 
StackMobCommon.API_SECRET = SECRET; 
StackMobCommon.USER_OBJECT_NAME = "user"; 
StackMobCommon.API_VERSION = 1; //! 0 for dev, 1 for production 

문제가 해결되지 않는 경우도 StackMob.getStackMob() getLogger()를 설정 setLogging (참).; 처음에 그리고 결과 로그를 게시

+1

사실 나는 이미 지원 티켓에이 질문에 대답했다. 로컬 시간이 길고 oauth 타임 스탬프 검사가 실패한 경우 문제가되는 것으로 나타났습니다. 최신 버전의 SDK는 타임 스탬프를 서버와 동기화하여 유지하므로 SDK를 업데이트하면 문제가 해결됩니다. –

관련 문제