React Native 앱(웹 포함)에서 공유하는 방법
15279 단어 mobiledevelopmentreactnative
그러나 지원되는 다른 플랫폼을 앱에 추가하면 복잡성이 더해집니다! 지원되는 각 플랫폼에서 작동하는지 확인해야 합니다.
최근에 저는 building a game with React Native , Match the Pairs를 통해 사용자가 게임을 이기기 위해 몇 번의 이동을 했는지 공유할 수 있었습니다.
iOS, Android 및 웹에서 실행됩니다. React Native
Share
API는 iOS 및 Android에서 작동하지만 웹에서는 작동하지 않으므로 이를 처리할 솔루션을 찾아야 했습니다.오늘은 실행되는 플랫폼에 따라 기능이 다른 함수를 빌드하는 방법을 다룰 것입니다.
shareGame 함수
먼저 사용자가 앱에서 "게임 공유"를 누를 때 호출되는 함수를 만듭니다.
type shareGameProps = {
emojis: string[]
moveCount: number
}
export const shareGame = async ({ emojis, moveCount }: shareGameProps) => {}
입력 예:
shareGame({
emojis: [
"🏄",
"💣",
"📬",
"😇",
"🤠",
"🦦",
"📸",
"📬",
"🤠",
"🏄",
"🌮",
"🌮",
"💣",
"😇",
"🦦",
"📸",
],
moveCount: 16,
})
공유 API
먼저 React Native의
Share
API을 활용할 수 있습니다.import { Share } from "react-native"
type shareGameProps = {
emojis: string[]
moveCount: number
}
export const shareGame = async ({ emojis, moveCount }: shareGameProps) => {
const message = "This is an example message"
return await Share.share({
message,
})
}
iOS 및 Android에서는 잘 작동하지만 웹에서는 지원되지 않는다는 오류가 발생합니다.
플랫폼 API 활용
그렇다면 플랫폼 간의 서로 다른 API 지원에 대해 무엇을 할 수 있을까요?
코어
Platform
API를 활용하여 지정된 플랫폼에서 기능을 변경할 수 있습니다.import { Share, Platform } from "react-native"
import * as Clipboard from "expo-clipboard"
type shareGameProps = {
emojis: string[]
moveCount: number
}
export const shareGame = async ({ emojis, moveCount }: shareGameProps) => {
const message = "This is an example message"
if (Platform.OS === "web") {
await Clipboard.setStringAsync(message)
alert(`The following message was copied to your clipboard.\n\n${message}`)
return
}
return await Share.share({
message,
})
}
위에서 플랫폼이 "웹"인 경우 (
expo-clipboard
또는 react-native-clipboard
을 통해) 메시지를 클립보드에 복사하는 것을 볼 수 있습니다.또한
alert
를 사용하여 메시지를 클립보드에 복사했으며 실제 메시지가 무엇인지 사용자에게 알립니다. 사용자 지정 모달은 여기에서 훨씬 더 나은 솔루션이 될 것입니다.플랫폼이 "웹"이 아닌 경우 계속해서
Share
API를 사용합니다.보너스: 공유 메시지 작성
이 섹션은 이 기사의 내용과 관련이 없지만 추가해야겠다고 생각했습니다. 실제 메시지를 작성해 보겠습니다.
다음과 같이 사용자가 플레이한 이모티콘 그리드를 만들고 싶습니다.
🏄 💣 📬 😇
🤠 🦦 📸 📬
🤠 🏄 🌮 🌮
💣 😇 🦦 📸
그렇게 하기 위해 이모티콘 배열을 4개 이모티콘의 4개 행으로 분할한 다음 새 줄 문자로 결합합니다.
import { Share, Platform } from "react-native"
import * as Clipboard from "expo-clipboard"
type shareGameProps = {
emojis: string[]
moveCount: number
}
const buildRow = (emojis: string[], start: number, end: number) =>
emojis.slice(start, end).join(" ")
export const shareGame = async ({ emojis, moveCount }: shareGameProps) => {
const row1 = buildRow(emojis, 0, 4)
const row2 = buildRow(emojis, 4, 8)
const row3 = buildRow(emojis, 8, 12)
const row4 = buildRow(emojis, 12, 16)
const emojiBoard = [row1, row2, row3, row4].join("\n")
const message = `I just beat Match the pairs in ${moveCount} moves!\n${emojiBoard}`
if (Platform.OS === "web") {
await Clipboard.setStringAsync(message)
alert(`The following message was copied to your clipboard. \n\n${message}`)
return
}
return await Share.share({
message,
})
}
그리고 우리는 그것을 가지고 있습니다! 각 플랫폼에서 동일한 API를 지원하지 않는 경우에도 여러 플랫폼에서 작동하는 게임 결과를 공유하는 기능입니다.
Reference
이 문제에 관하여(React Native 앱(웹 포함)에서 공유하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/spencercarli/how-to-share-from-a-react-native-app-including-the-web-5ad9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)