func (dir *DeviceInfoResult) FromResponse(resp *http.Response) error {
	err := common.RespToJson(resp, &dir)
	if err != nil {
		return err
	}
	dir.ResponseBase = common.NewResponseBase(resp)
	return nil
}
// 更新设备 (设置的别名与标签)
func (jpc *JPushClient) UpdateDevice(registrationId string, payload *device.DeviceUpdate) (*common.ResponseBase, error) {
	url := fmt.Sprintf(common.DEVICE_URL, registrationId)
	resp, err := jpc.http.PostJson(url, payload, jpc.headers)
	if err != nil {
		return nil, err
	}

	result := common.NewResponseBase(resp)
	return &result, nil
}
// 成功: {"sendno":"18", "msg_id":"1828256757"}
// 失败: {"msg_id": 1035959738, "error": {"message": "app_key does not exist", "code": 1008}}
//
// 所有的 HTTP API Response Header 里都加了三项频率控制信息:
//
// X-Rate-Limit-Limit:    当前 AppKey 一个时间窗口内可调用次数
// X-Rate-Limit-Remaining:当前时间窗口剩余的可用次数
// X-Rate-Limit-Reset:    距离时间窗口重置剩余的秒数
func (pr *PushResult) FromResponse(resp *http.Response) error {
	// 成功或失败时解析出返回的数据
	// 实际上只有当 StatusCode = 200 时,才有 msg_id 和 sendno
	// 其他情况下只有 error 数据。 error 和 (msg_id, sendno) 不会同时存在
	err := common.RespToJson(resp, &pr)
	if err != nil {
		return err
	}

	pr.ResponseBase = common.NewResponseBase(resp)

	return nil
}