安卓4g网络下无法加载微信头像

之前一直用 cc.loader.load 加载图片资源,一直都没问题,昨天突然4g情况下无法加载,wifi下正常,这个是什么原因,怎么解 (ios 用相同的代码,加载正常)

2赞

@panda

遇到相同情况,同问

你那现在解决了吗

这是腾讯网络的问题

没有解决,正在想办法。有些安卓机4G加载是正常的,有些4G加载不到,很怪异…

有些安卓机4G加载是正常的,有些4G加载不到,很影响用户使用,现在也只能想办法去解决了…

有什么办法解决吗

我准备做头像微信头像缓存,相同的头像只加载一次。

我们也碰到了, 引擎组出来解释下啊, 怎么解决, 这肯定和底层的加载机制有关系吧, 不然ios可以,web可以, android用wifi也可以

android7.0 100%必现,而且这个问题是最近出现的。我怀疑是腾讯和抖音出事后的后续了

腾讯和抖音涉及头像问题后,应该腾讯限制了部分访问头像方法,刚好 某些特定条件下的ccload被限制了,换http下载是可以的

1赞

我也遇到了 好几个项目都遇到这个问题了,请问有解决方案吗

android7.0 4g网络 100%必现 等engine组修复吧

var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = 'arraybuffer';
xhr.onreadystatechange = function () {
cc.log("xhr.readyState  " +xhr.readyState);
cc.log("xhr.status  " +xhr.status);
if (xhr.readyState === 4) {
    if(xhr.status === 200) {         
         saveFile(xhr.response);
     } else {
         saveFile(null);
        }
      }
 };
xhr.send();

试试这种方式保存。我这样可以的

这种把图片下载到本地保存,再从本地读取?

Native.loadNative = function(url, callback){
    if (!Native.isNav()) {
        callback(url);
        return;
    }
    if (Native.isIos()) {
        callback(url);
        return;
    }

    let dirpath =  jsb.fileUtils.getWritablePath() + 'headimg/';
    let filepath = dirpath + Base64.encode64(url) + '.jpg';

    if( jsb.fileUtils.isFileExist(filepath) ){
        callback(filepath);
        return;
    }

    let saveFile = function(data){
        if( data ){
            if( !jsb.fileUtils.isDirectoryExist(dirpath) ){
                jsb.fileUtils.createDirectory(dirpath);
            }
            if( jsb.fileUtils.writeDataToFile(  new Uint8Array(data) , filepath) ){
                console.log('Remote write file succeed.');
                callback(filepath);
            }else{
                console.log('Remote write file failed.');
            }
        }else{
            console.log('Remote download file failed.');
        }
    };
    
    let xhr = new XMLHttpRequest();
    xhr.responseType = 'arraybuffer';

    xhr.onreadystatechange = function () {
        cc.log("xhr.readyState  " +xhr.readyState);
        cc.log("xhr.status  " +xhr.status);
        if (xhr.readyState === 4 ) {
            if(xhr.status === 200){
                saveFile(xhr.response);
            }else{
                saveFile(null);
            }
        }
    }.bind(this);
    xhr.open("GET", url, true);
    xhr.send();
};

使用这个方法暂时解决问题, 第一次会比较慢;所以判断了下如果不是原生或者是ios就直接返回url;否则保存到本地 并返回本地路径

我们的解决了。
我们的微信授权这块是放在后台服务器处理的,就把微信授权那块的代码调整了下,获取微信头像路径之后将头像下载到服务器,然后在数据库中存服务器的图片地址, cc.loader.load加载直接使用数据库中服务器图片地址。.
这种处理只需要重新登录下就可以获取自己的头像,不需要cocos做改动。
不过牵涉到其他人头像的,就需要批处理将数据库里面的全部转换成服务器的图片路径。

我们也出现了,也是最近才出现,今天会试试服务器转发微信头像,谢谢