Damoa App Bridge
퀸잇 웹뷰(damoa-customer-web)에서 퀸잇앱(damoa-react-native)에 메시지를 전달,
퀸잇앱에서 오는 메세지를 필터링하는 기능을 제공합니다.
메시지 리스트 보러가기
필터링 리스트 보러가기
설치방법
yarn add @rapportlabs/damoa-app-bridge@${version}
제공기능
Message
원하는 메시지를 퀸잇앱에 전달합니다.
// 앱에 진동을 발생시킵니다.
hapticFeedback('impactLight')
// 앱에서 하나의 navigation stack을 제거하는 기능을합니다.
navigate({
type: 'pop'
count: 1
})
Filter
퀸잇앱에서 전달된 메시지를 필터링하여 웹뷰에서 원하는 액션을 취할 때 사용합니다.
// native에서 발생한 뒤로가기 액션을 필터링하여 웹뷰에서 원하는 액션을 취합니다.
const subscription = AppBridge.message$.pipe(
filter(isBackButtonPressedMessage),
filter(() => isFocused),
).subscribe(() => {
if (backButtonHandlerManager.activeHandler !== undefined) {
backButtonHandlerManager.activeHandler()
} else if (canGoBack()) {
router.back()
} else {
navigate({ type: 'pop' })
}
})
웹뷰에서 앱으로 보내는 메세지 추가
/message/WebToApp/HapticFeedbackMessage.ts 파일 추가
import { BaseMessage } from "../shared/model/BaseMessage"
import { WebToAppMessageBuilder } from "./utils/WebToAppMessageBuilder"
import { postWebToAppMessage } from "./utils/WebviewPostMessage"
export interface HapticFeedbackMessage extends BaseMessage {
kind: 'hapticFeedback'
data: {
type: 'impactLight' | 'impactMedium' | 'impactHeavy'
}
}
/**
* 앱에 진동을 발생시킵니다. param의 type에 따라 진동의 세기가 조절됩니다.
* [isHapticFeedbackMessage](/damoa-webview-bridge/filter/functions/isHapticFeedbackMessage)로 필터링을 진행합니다.
* @example
```typescript
const onHaptic = useCallback(() => {
hapticFeedback('impactMedium')
}, [])
* ```
*/
export const hapticFeedback = WebToAppMessageBuilder.build(
(type: HapticFeedbackMessage['data']['type']) => (
postWebToAppMessage({ kind: 'hapticFeedback', data: { type }})
),
'1.81.0-0'
)
/**
* [hapticFeedback](/damoa-app-bridge/message/functions/hapticFeedback)이벤트를 필터링합니다.
* @example
```typescript
const hapticFeedbackSubscription = WebviewBridge.message$.pipe(
filter(isHapticFeedbackMessage),
).subscribe((message) => {
HapticFeedback.trigger(message.data.type)
})
* ```
*/
export const isHapticFeedbackMessage = (message: BaseMessage): message is HapticFeedbackMessage => (
message.kind === 'hapticFeedback'
)/packages/damoa-app-bridge/src/message.ts 에 hapticFeedback함수 추가
export { HapticFeedbackMessage, hapticFeedback } from '../../../message/WebToApp/hapticFeedback'/packages/damoa-webview-bridge/src/filter.ts 에 hapticFeedback함수 추가
export { isHapticFeedbackMessage } from '../../../message/WebToApp/hapticFeedback'