@sendbird/uikit-react-native
Version:
Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.
88 lines (83 loc) • 3.32 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var _reactNative = require("react-native");
var _uikitUtils = require("@sendbird/uikit-utils");
var _useContext = require("./useContext");
const usePushTokenRegistration = () => {
const {
sdk
} = (0, _useContext.useSendbirdChat)();
const {
notificationService
} = (0, _useContext.usePlatformService)();
const refreshListener = (0, _react.useRef)();
const [registerToken, unregisterToken, getToken] = (0, _uikitUtils.useIIFE)(() => {
return [_reactNative.Platform.select({
ios: token => sdk.registerAPNSPushTokenForCurrentUser(token),
default: token => sdk.registerFCMPushTokenForCurrentUser(token)
}), _reactNative.Platform.select({
ios: token => sdk.unregisterAPNSPushTokenForCurrentUser(token),
default: token => sdk.unregisterFCMPushTokenForCurrentUser(token)
}), _reactNative.Platform.select({
ios: () => notificationService.getAPNSToken(),
default: () => notificationService.getFCMToken()
})];
});
const registerPushTokenForCurrentUser = (0, _uikitUtils.useFreshCallback)(async () => {
// Check and request push permission
const hasPermission = await notificationService.hasPushPermission();
if (!hasPermission) {
const pushPermission = await notificationService.requestPushPermission();
if (!pushPermission) {
_uikitUtils.Logger.warn('[usePushTokenRegistration]', 'Not granted push permission');
return;
}
}
// Register token refresh listener
refreshListener.current = notificationService.onTokenRefresh(registerToken);
// Register token
const token = await getToken();
if (token) {
try {
await registerToken(token);
_uikitUtils.Logger.log('[usePushTokenRegistration]', 'registered token:', token);
} catch (error) {
_uikitUtils.Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);
}
}
// Remove listener
refreshListener.current = notificationService.onTokenRefresh(async token => {
try {
await registerToken(token);
_uikitUtils.Logger.log('[usePushTokenRegistration]', 'registered token:', token);
} catch (error) {
_uikitUtils.Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);
}
});
});
const unregisterPushTokenForCurrentUser = (0, _uikitUtils.useFreshCallback)(async () => {
var _refreshListener$curr;
// Unregister token refresh listener
(_refreshListener$curr = refreshListener.current) === null || _refreshListener$curr === void 0 || _refreshListener$curr.call(refreshListener);
// Unregister token
const token = await getToken();
if (token) {
try {
await unregisterToken(token);
_uikitUtils.Logger.log('[usePushTokenRegistration]', 'unregistered token:', token);
} catch (error) {
_uikitUtils.Logger.error('[usePushTokenRegistration]', 'failed to unregister token:', error);
}
}
});
return {
registerPushTokenForCurrentUser,
unregisterPushTokenForCurrentUser
};
};
var _default = exports.default = usePushTokenRegistration;
//# sourceMappingURL=usePushTokenRegistration.js.map
;