Когда вы вызываете getDownloadUrl()
, вызов является асинхронным, и вы должны подписаться на успешный обратный вызов, чтобы получить результаты:
// Calls the server to securely obtain an unguessable download Url
private void getUrlAsync (String date){
// Points to the root reference
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference dateRef = storageRef.child("/" + date+ ".csv");
dateRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
{
@Override
public void onSuccess(Uri downloadUrl)
{
//do something with downloadurl
}
});
}
Это вернет общедоступный неопознанный URL-адрес загрузки. Если вы просто загрузили файл, этот общедоступный URL-адрес будет включен в обратный вызов для загрузки (вам не нужно вызывать другой метод async после того, как вы его загрузили).
Однако, если все, что вы хотите, a String
представления ссылки, вы можете просто вызвать .toString()
// Returns a Uri of the form gs://bucket/path that can be used
// in future calls to getReferenceFromUrl to perform additional
// actions
private String niceRefLink (String date){
// Points to the root reference
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference dateRef = storageRef.child("/" + date+ ".csv");
return dateRef.toString();
}
Используйте безопасный URL для вашего первоначального соединения, то есть вместо «http: //» используйте «https: //». Если транспорт WebSocket выбран, то Socket.IO должен автоматически использовать «wss: //» (SSL) для соединения WebSocket.
Обновление:
Вы также можете попробовать создать соединение с использованием опции «secure»:
var socket = io.connect('https://localhost', {secure: true});
Если вашему сертифицированному файлу сервера не доверяют (например, вы можете создать хранилище ключей самостоятельно с помощью команды keytool в java), вы должны добавить дополнительную опцию rejectUnauthorized
var socket = io.connect('https://localhost', {rejectUnauthorized: false});
В том же примечании, если ваш сервер поддерживает как http
, так и https
, вы можете подключиться с помощью:
var socket = io.connect('//localhost');
до автоматически определить схему браузера и подключиться используя соответственно http / https. когда в https транспорт будет защищен по умолчанию, поскольку соединение с использованием
var socket = io.connect('https://localhost');
будет использовать защищенные веб-сокеты - wss://
(избыточность {secure: true}
).
для получения дополнительной информации о том, как легко обслуживать как http, так и https, используя тот же сервер узлов, проверьте этот ответ .
Вот как мне удалось настроить его с помощью выражения:
var fs = require( 'fs' );
var app = require('express')();
var https = require('https');
var server = https.createServer({
key: fs.readFileSync('./test_key.key'),
cert: fs.readFileSync('./test_cert.crt'),
ca: fs.readFileSync('./test_ca.crt'),
requestCert: false,
rejectUnauthorized: false
},app);
server.listen(8080);
var io = require('socket.io').listen(server);
io.sockets.on('connection',function (socket) {
...
});
app.get("/", function(request, response){
...
})
Надеюсь, что это спасет чье-то время.
Обновление: для тех, кто использует, разрешает шифрование использовать это
var server = https.createServer({
key: fs.readFileSync('privkey.pem'),
cert: fs.readFileSync('fullchain.pem')
},app);
проверить это.конфигурацию ..
app = module.exports = express();
var httpsOptions = { key: fs.readFileSync('certificates/server.key'), cert: fs.readFileSync('certificates/final.crt') };
var secureServer = require('https').createServer(httpsOptions, app);
io = module.exports = require('socket.io').listen(secureServer,{pingTimeout: 7000, pingInterval: 10000});
io.set("transports", ["xhr-polling","websocket","polling", "htmlfile"]);
secureServer.listen(3000);