根据deviceTokenList群推
@param $appId
@param $contentId
@param $deviceTokenList
@return mixed
@throws RequestException
@throws \UnexpectedValueException
@throws \InvalidArgumentException
165745
public function pushAPNMessageToList($appId, $contentId, $deviceTokenList)
    {
        $params = array();
        $params['action'] = 'apnPushToListAction';
        $params['appkey'] = $this->appkey;
        $params['appId'] = $appId;
        $params['contentId'] = $contentId;
        $params['DTL'] = $deviceTokenList;
        $needDetails = GTConfig::isPushListNeedDetails();
        $params['needDetails'] = $needDetails;
        return $this->httpPostJSON($this->host, $params);
    }
1300160
public function getDevice($deviceId)
    {
        if (!isset($this->deviceCache[$deviceId])) {
            $device = $this->persistenceStorage->load($deviceId);

            if (!$device) {
                throw new \InvalidArgumentException(
                    'There is no device with ID [' . $deviceId . '] in the loaded WURFL Data'
                );
            }

            $this->deviceCache[$deviceId] = $device;
        }

        return $this->deviceCache[$deviceId];
    }
401426
public function loadContentTypeDraft($contentTypeId)
    {
        $contentTypeDraft = $this->contentTypeService->loadContentTypeDraft($contentTypeId);

        return new Values\RestContentType(
            $contentTypeDraft,
            $contentTypeDraft->getFieldDefinitions()
        );
    }
1227610
public function checkAuth($appid='',$appsecret='',$token=''){
		if (!$appid || !$appsecret) {
			$appid = $this->appid;
			$appsecret = $this->appsecret;
		}
		if ($token) { //手动指定token，优先使用
		    $this->access_token=$token;
		    return $this->access_token;
		}
		//TODO: get the cache access_token
		$result = $this->http_get(self::API_URL_PREFIX.self::AUTH_URL.'appid='.$appid.'&secret='.$appsecret);
		if ($result)
		{
			$json = json_decode($result,true);
			if (!$json || isset($json['errcode'])) {
				$this->errCode = $json['errcode'];
				$this->errMsg = $json['errmsg'];
				return false;
			}
			$this->access_token = $json['access_token'];
			$expire = $json['expires_in'] ? intval($json['expires_in'])-100 : 3600;
			//TODO: cache access_token
			return $this->access_token;
		}
		return false;
	}
740766
@Override
	public byte[] getAppIdCeil(String appId) {

		int appIdCode = codecer.findId(APP_ID, appId).intValue();
		ByteBuffer byteBuffer = ByteBuffer.allocate(12);
		putUnsignedShort(byteBuffer, appIdCode);
		putUnsignedShort(byteBuffer, Integer.MAX_VALUE);
		putUnsignedShort(byteBuffer, Integer.MAX_VALUE);
		putUnsignedShort(byteBuffer, Integer.MAX_VALUE);
		putUnsignedShort(byteBuffer, Integer.MAX_VALUE);
		putUnsignedShort(byteBuffer, Integer.MAX_VALUE);
		
		return byteBuffer.array();
	}
34778
public function getById($appId, $uploadId, array $queryParams = [])
    {
        $response = $this->api->applications()->uploads()->getById($appId, $uploadId, $queryParams);

        return new UploadResponse($response);
    }
363076
public function getUnregisteredDeviceTokens(array $devices_token)
    {
        $tokens = [];

        if (!empty($this->feedback->tokenFailList)) {
            $tokens = $this->feedback->tokenFailList;
        }
        if (!empty($this->feedback->apnsFeedback)) {
            $tokens = array_merge($tokens, array_pluck($this->feedback->apnsFeedback, 'devtoken'));
        }

        return $tokens;
    }
367702
public static EntityGetOperation<ContentKeyInfo> get(String contentKeyId) {
        return new DefaultGetOperation<ContentKeyInfo>(ENTITY_SET,
                contentKeyId, ContentKeyInfo.class);
    }
48718
public function bindLocationOtherShakeAroundDevice($device_identifier, $poi_id, $poi_appid)
    {
        if (!$this->access_token && !$this->getAccessToken()) {
            return false;
        }
        $data = array('device_identifier' => $device_identifier, 'poi_id' => $poi_id, "type" => 2, "poi_appid" => $poi_appid);
        $result = Tools::httpPost(self::API_BASE_URL_PREFIX . self::SHAKEAROUND_DEVICE_BINDLOCATION . "access_token={$this->access_token}", Tools::json_encode($data));
        if ($result) {
            $json = json_decode($result, true);
            if (empty($json) || !empty($json['errcode'])) {
                $this->errCode = isset($json['errcode']) ? $json['errcode'] : '505';
                $this->errMsg = isset($json['errmsg']) ? $json['errmsg'] : '无法解析接口返回内容！';
                return $this->checkRetry(__FUNCTION__, func_get_args());
            }
            return $json;
        }
        return false;
    }
685941
public ApiResponse<DeviceTokenEnvelope> getDeviceTokenWithHttpInfo(String deviceId) throws ApiException {
        com.squareup.okhttp.Call call = getDeviceTokenValidateBeforeCall(deviceId, null, null);
        Type localVarReturnType = new TypeToken<DeviceTokenEnvelope>(){}.getType();
        return apiClient.execute(call, localVarReturnType);
    }
107092
public function cancelContentId($contentId)
    {
        $params = array();
        $params['action'] = 'cancleContentIdAction';
        $params['appkey'] = $this->appkey;
        $params['contentId'] = $contentId;
        $rep = $this->httpPostJSON($this->host, $params);
        return (string)$rep['result'] === 'ok';
    }
263088
public static Function<RequestEnvelope, String> deviceId() {
        return r -> Optional.ofNullable(r).map(RequestEnvelope::getContext)
                .map(Context::getSystem)
                .map(SystemState::getDevice)
                .map(Device::getDeviceId)
                .orElseThrow(() -> new PersistenceException("Could not retrieve device ID from request envelope to generate persistence ID"));
    }
316258
@Override
    public String[] getDeviceList(final String serverName, final String className) throws DevFailed {
        final DeviceData send = new DeviceData();
        send.insert(new String[] { serverName, className });
        final DeviceData received = database.command_inout("DbGetDeviceList", send);
        return received.extractStringArray();
    }
1202158
public function createMessage($deviceTokens = [])
    {
        $message = new Message();
        if (is_string($deviceTokens)) {
            $deviceTokens = [$deviceTokens];
        }
        if (!is_array($deviceTokens)) {
            throw new InvalidParamException("\$deviceTokens must be string or array");
        }
        foreach ($deviceTokens as $token) {
            $message->addRecipient($this->createDevice($token));
        }
        return $message;
    }
1217270
public function getAll($appId = null, array $queryParams = [])
    {
        $response = $this->api->applications()->uploads()->getAll($appId, $queryParams);

        return new UploadsResponse($response);
    }
450893
public static DeviceGroupGetListResult deviceGroupGetList(
            String accessToken, DeviceGroupGetList deviceGroupGetList) {
        return deviceGroupGetList(accessToken,
                JsonUtil.toJSONString(deviceGroupGetList));
    }
731731
public CompletableFuture<Token> findTokenByAppId(String appId) {
        requireNonNull(appId, "appId");
        return tokenRepo.fetch(INTERNAL_PROJ, Project.REPO_DOGMA, TOKEN_JSON)
                        .thenApply(tokens -> tokens.object().get(appId));
    }