Beispiel #1
0
def update_device_info(registration_id: str):
    """
    Task used to fetch device status information from the google Instance ID service
    """
    if not settings.FCM_API_KEY:
        return

    push_service = FCMNotification(api_key=settings.FCM_API_KEY)
    response = push_service.registration_info_request(registration_id)
    if response.status_code == 200:
        # expect the device to be known
        response_json = response.json()
        device = FCMDevice.objects.get(registration_id=registration_id)
        device_updated = False

        if not device.is_active:
            device.is_active = True
            device_updated = True

        if device.platform != response_json.get('platform'):
            device.platform = response_json.get('platform')
            device_updated = True

        # connectDate is optional
        if response_json.get('connectDate'):
            connect_date = datetime.strptime(response_json.get('connectDate'),
                                             '%Y-%m-%d').date()
            if device.connect_date != connect_date:
                device.connect_date = connect_date
                device_updated = True

        if device.app_version != response_json.get('applicationVersion'):
            device.app_version = response_json.get('applicationVersion')
            device_updated = True

        if device_updated:
            device.save()

        return response.json()
    if response.status_code == 404:
        # {"error": "No information found about this instance id."}
        try:
            device = FCMDevice.objects.get(registration_id=registration_id)
        except FCMDevice.DoesNotExist:
            return response.json()
        if device.is_active:
            device.is_active = False
            device.save()
        return response.json()
    else:
        # raise appropriate RequestException
        response.raise_for_status()