Кто-нибудь знает, как мы можем поделиться треком (у меня есть URL-адрес, но я его скачаю, поэтому считайте, что у меня есть данные, которые я получил из сеанса URL-адреса) с помощью ShareLink в Swift, к которому также прикреплено изображение (Я думаю, что музыкальные приложения иногда используют GIF)? Любой пример высоко ценится. Я не могу найти ничего, что показывает, как мы можем поделиться изображением/видео вместе с аудиофайлом, используя ссылку общего доступа. Я хочу поделиться им в историях Instagram, чтобы его можно было воспроизвести там.
Мне удалось получить данные и загрузить mp3, но я не могу поделиться ими с изображением, и даже когда я попробуйте поделиться mp3 в одиночку, и нажмите «Поделиться», но не получится. Мне нужен эффект того, как мы публикуем трек из Spotify или других музыкальных приложений, к которому также прикреплено изображение или GIF-файл.
Хороший пример того, что я ищу. Spotify или любое другое музыкальное приложение, вы можете поделиться треком с изображением в качестве фона. Как я могу добиться этого в Swift?
Мне просто нужен пример, чтобы увидеть процесс и то, как он работает. Спасибо!
Вот небольшой макет, который я сделал. Я не использую хорошие сетевые вызовы или принципы программирования, просто быстро придумал что-то, чтобы было более понятно, что я ищу:< /p>
Код: Выделить всё
public struct Audio: Transferable {
/*
I already have the image in my asset, and I fetched the mp3 from my network call, how can I share them both so they work like music apps
*/
public static var transferRepresentation: some TransferRepresentation {
DataRepresentation(exportedContentType: .mp3) { audio in
audio.data
}
}
public var data: Data
}
class GetData {
var cancellables = Set()
func fetch(_ url: URL) -> AnyPublisher {
return URLSession.shared.dataTaskPublisher(for: url)
.retry(1)
.tryMap { data, response in
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
throw URLError(.badServerResponse) // or any other appropriate error
}
return data
}
.eraseToAnyPublisher()
}
func getData(completion: @escaping (Result) -> Void) {
fetch(URL(string: "https://samplelib.com/lib/preview/mp3/sample-3s.mp3")!)
.sink(receiveCompletion: { completion in
switch completion {
case .finished:
print("Request completed successfully.")
case .failure(let error):
print("Request failed with error: \(error)")
}
}, receiveValue: { data in
// Handle the received data
print("Received data: \(data)")
completion(.success(data))
})
.store(in: &cancellables)
}
}
public struct ShareView: View {
@State var data = GetData()
@State var mp3Data: Data? = nil
public var body: some View {
VStack {
Button("Fetch Data") {
data.getData { result in
switch result {
case .success(let data):
// Handle the received data
print("Received data: \(data)")
mp3Data = data
case .failure(let error):
// Handle the error
print("Error: \(error)")
}
}
}
.padding()
if let mp3Data {
let audio = Audio(data: mp3Data)
ShareLink("share me", item: audio, subject: Text("subject"), message: Text("message"), preview: SharePreview("preview"))
}
}
}
}
Источник: https://stackoverflow.com/questions/781 ... -sharelink
Мобильная версия