Отображение статической карты Google приведет к завершению NSURLConnection с ошибкой и получению пустого изображения [дубликат]

Вышеуказанный метод taskSnapshot.getMetadata().getDownloadUrl(); устарел и как альтернатива предоставил эту альтернативу:

final StorageReference ref = storageRef.child("images/mountains.jpg");
uploadTask = ref.putFile(file);

Task urlTask = uploadTask.continueWithTask(new 
  Continuation>() {
     @Override
      public Task then(@NonNull Task task) throws Exception {
    if (!task.isSuccessful()) {
        throw task.getException();
    }

    // Continue with the task to get the download URL
    return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
    if (task.isSuccessful()) {
        Uri downloadUri = task.getResult();
    } else {
        // Handle failures
        // ...
    }
  }
});

0
задан Programmer 2 September 2016 в 17:02
поделиться

1 ответ

Измените код в своем вопросе и сможете реплицировать вашу проблему. Это происходит из-за нового ограничения на использование http-соединений вместо https на iOS. Как я уже упоминал в своем комментарии, замена WWW на UnityWebRequest решена этой проблемой.

Кроме того, вы произвольно создаете новые текстуры каждый раз при выполнении new Texture2D(1280, 1280, TextureFormat.RGB24, false);. Это должно быть сделано с компонентом пользовательского интерфейса Unity RawImage. В этом случае нет лишнего выделения памяти.

Все, что вам нужно сделать для кода в вашем вопросе, - удалить API WWW и использовать UnityWebRequest. Также удалите Renderer или Texture2D и используйте RawImage для отображения вашей карты. Ниже приведен простой тестовый сценарий, который я использовал для проверки этого. Он работает как на Editor, iOS, так и на всех других платформах.

public class Gpsconnect : MonoBehaviour
{
    public RawImage imageDisp;
    public float fixLat = 42.3627f;
    public float fixLon = -71.05686f;
    public int zoom = 4;
    public string key = "";
    public Vector3 iniRef;
    public Transform cam;
    private Camera mycam;
    private string url = "";

    //Update Map with the corresponding map images for the current location ============================================
    IEnumerator load()
    {
        yield return null;
        mycam = Camera.main;
        fixLat = ((360 / Mathf.PI) * Mathf.Atan(Mathf.Exp(0.00001567855943f * (cam.position.z - 3 * mycam.orthographicSize / 2 + iniRef.z)))) - 90;
        fixLon = (18000 * (cam.position.x + iniRef.x)) / 20037508.34f;

        //MAP ================================================================================
        //Build a valid Google Maps tile request for the current location 

        url = "https://maps.google.com/maps/api/staticmap?center=" + fixLat + "," + fixLon + "&zoom=" + zoom + "&scale=2&size=640x640&style=feature:all|element:geometry|hue:0x00fff0|lightness:0|gamma:0.21|visibility:on&style=feature:all|element:labels|visibility:off&style=feature:landscape.man_made|element:geometry|color:0x133f42|visibility:on&style=feature:landscape.natural|element:geometry.fill|visibility:on|hue:0x00ffd2|saturation:35|lightness:0|gamma:0.5&style=feature:poi|element:geometry.fill|lightness:0|gamma:0.6|visibility:on&style=feature:poi.park|element:geometry|visibility:on|saturation:0|color:0x2e9470&style=feature:road|element:geometry.fill|visibility:on|color:0x05111a&style=feature:road|element:geometry.stroke|visibility:off&style=feature:transit|element:geometry|visibility:off" + "&sensor=false&key=" + key;

        UnityWebRequest www = UnityWebRequest.GetTexture(url);
        yield return www.Send();
        Debug.Log("Done: ");

        if (www.isError)
        {
            Debug.Log("Error while downloading image: " + www.error);
        }
        else
        {
            imageDisp.texture = ((DownloadHandlerTexture)www.downloadHandler).texture;
        }
    }

    void Start()
    {
        StartCoroutine(load());
    }
}
0
ответ дан Programmer 19 August 2018 в 14:34
поделиться
  • 1
    Большое вам спасибо за вашу работу! Спасибо! Спасибо! Спасибо! Спасибо! Спасибо! – Angelsm 3 September 2016 в 12:20
  • 2
    Добро пожаловать. Удачи с вашим приложением. – Programmer 3 September 2016 в 12:33
Другие вопросы по тегам:

Похожие вопросы: