알림: 이 라이브러리는 애플리케이션 내에서 Web3에 대한 필수 지원을 이미 활성화했다고 가정합니다. 이는 npx create-react-native-dapp를 사용하여 새 프로젝트를 생성하거나 npx rn-nodeify --install --hack을 사용하여 기존 프로젝트에 Web3 지원을 도입하여 수행할 수 있습니다.
자세한 내용은 설명서를 확인하세요.
yarn add @walletconnect/react-native-dapp
아직 설치하지 않은 경우 @react-native-async-storage/async-storage와 같은 영구 저장소 공급자와 함께 react-native-svg를 설치해야 할 수도 있습니다.
yarn add react-native-svg @react-native-async-storage/async-storage
import * as React from 'react';
import WalletConnectProvider from '@walletconnect/react-native-dapp';
import AsyncStorage from '@react-native-async-storage/async-storage';
export default function App(): JSX.Element {
return (
<WalletConnectProvider
redirectUrl={Platform.OS === 'web' ? window.location.origin : 'yourappscheme://'}
storageOptions= {{
asyncStorage AsyncStorage,
}}>
<>{/* awesome app here */}</>
</WalletConnectProvider>
);
}
위에서 WalletConnectProvider에 두 개의 필수 매개변수를 전달합니다. redirectUrl 및 storageOptions:
특히 WalletConnectProvider는 선택적으로 IWalletConnectOptions 인터페이스에서 정의한 대로 WalletConnect 구성 인수를 허용합니다.
import * as React from 'react';
import WalletConnectProvider from '@walletconnect/react-native-dapp';
import AsyncStorage from '@react-native-async-storage/async-storage';
export default function App(): JSX.Element {
return (
<WalletConnectProvider
bridge="https://bridge.walletconnect.org"
clientMeta={{
description: 'Connect with WalletConnect',
url: 'https://walletconnect.org',
icons: ['https://walletconnect.org/walletconnect-logo.png'],
name: 'WalletConnect',
}}
redirectUrl={Platform.OS === 'web' ? window.location.origin : 'yourappscheme://'}
storageOptions= {{
asyncStorage AsyncStorage,
}}>
<>{/* awesome app here */}</>
</WalletConnectProvider>
);
}
위의 코드 조각에서 필수 소품 외에 WalletConnectProvider의 기본 구성을 볼 수 있습니다.
팁: 사용자 지정 옵션은 이 기본 구성에 대해 깊이 병합됩니다. 따라서 모든 중첩 속성을 정의할 필요 없이 개별 중첩 속성을 재정의할 수 있습니다.
WalletConnectProvider를 수동으로 사용하는 대신 루트 애플리케이션을 WalletConnectProvider에 래핑하는 withWalletConnect 상위 구성 요소를 사용할 수 있습니다.
import * as React from 'react';
import { withWalletConnect, useWalletConnect } from '@walletconnect/react-native-dapp';
import AsyncStorage from '@react-native-async-storage/async-storage';
function App(): JSX.Element {
const connector = useWalletConnect(); // valid
return <>{/* awesome app here */}</>;
}
export default withWalletConnect(App, {
clientMeta: {
description: 'Connect with WalletConnect',
},
redirectUrl: Platform.OS === 'web' ? window.location.origin : 'yourappscheme://',
storageOptions: {
asyncStorage: AsyncStorage,
},
});
이것은 WalletConnectProvider의 수동 구현과 기능면에서 거의 동일하지만 앱 구성 요소에서 직접 useWalletConnect를 호출할 수 있다는 주요 차이점이 있습니다. 반대로 이전 예제에서는 WalletConnectProvider의 하위 구성 요소만 이 후크(앱을 부르는 hook을 의미하는 듯 <>{/ awesome app here /}</>)를 호출할 수 있습니다.
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useWalletConnect, withWalletConnect } from '@walletconnect/react-native-dapp';
import * as React from 'react';
function App(): JSX.Element {
const connector = useWalletConnect();
if (!connector.connected) {
/**
* Connect! 🎉
*/
return <Button title="Connect" onPress={() => connector.connect())} />;
}
return <Button title="Kill Session" onPress={() => connector.killSession()} />;
}
export default withWalletConnect(App, {
redirectUrl: Platform.OS === 'web' ? window.location.origin : 'yourappscheme://',
storageOptions: {
asyncStorage AsyncStorage,
},
});
예를 들어 Modal이 아닌 BottomSheet를 사용하여 지갑 선택을 렌더링하도록 선택할 수 있습니다.
import AsyncStorage from '@react-native-async-storage/async-storage';
import BottomSheet from 'react-native-reanimated-bottom-sheet';
import { Image, Text, TouchableOpacity } from 'react-native';
import {
useWalletConnect,
withWalletConnect,
RenderQrcodeModalProps,
WalletService,
} from '@walletconnect/react-native-dapp';
import * as React from 'react';
function CustomBottomSheet({
walletServices,
visible,
connectToWalletService,
uri,
}: RenderQrcodeModalProps): JSX.Element {
const renderContent = React.useCallback(() => {
return walletServices.map((walletService: WalletService, i: number) => (
<TouchableOpacity key={`i${i}`} onPress={() => connectToWalletService(walletService, uri)}>
<Image source={{ uri: walletService.logo }} />
<Text>{walletService.name}</Text>
</TouchableOpacity>
));
}, [walletServices, uri]);
return <BottomSheet renderContent={renderContent} {...etc} />;
};
function App(): JSX.Element {
const connector = useWalletConnect();
return <>{/* awesome custom app here */}</>;
}
export default withWalletConnect(App, {
redirectUrl: Platform.OS === 'web' ? window.location.origin : 'yourappscheme://',
storageOptions: {
asyncStorage AsyncStorage,
},
renderQrcodeModal: (props: RenderQrcodeModalProps): JSX.Element => (
<CustomBottomSheet {...props} />
),
});
drop-in library : 프로그램을 대체 했을 때 다른 설정 등을 바꿀 필요 없이 성능이 올라가는 라이브러리를 의미한다고 해석 - (drop-in replacement 참조)
snippet : 단편, 조각 으로 해석