@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.
76 lines (72 loc) • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _reactNative = require("react-native");
// Type definitions for Firebase Messaging Module instance
// This represents the instance returned by messaging() or getMessaging()
// We use a type alias to handle both v14 and v22+ types
// Type definitions for modular API support (Firebase v22+)
// The modular API provides standalone functions that accept a messaging instance
// Create a flexible type that can handle both v14 and v22+ Firebase modules
const isModularAPI = module => {
return typeof module.getMessaging === 'function';
};
const createNativeNotificationService = ({
messagingModule,
permissionModule
}) => {
const isModular = isModularAPI(messagingModule);
const modularMessaging = isModular ? messagingModule : null;
const messaging = isModular ? modularMessaging.getMessaging() : messagingModule();
const authorizedStatus = [messagingModule.AuthorizationStatus.AUTHORIZED, messagingModule.AuthorizationStatus.PROVISIONAL];
return {
getAPNSToken() {
if (modularMessaging) {
return modularMessaging.getAPNSToken(messaging);
}
return messaging.getAPNSToken();
},
getFCMToken() {
if (modularMessaging) {
return modularMessaging.getToken(messaging);
}
return messaging.getToken();
},
async hasPushPermission() {
if (_reactNative.Platform.OS === 'android') {
const result = await permissionModule.checkNotifications();
return result.status === 'granted';
}
if (_reactNative.Platform.OS === 'ios') {
const status = modularMessaging ? await modularMessaging.hasPermission(messaging) : await messaging.hasPermission();
return authorizedStatus.includes(status);
}
return false;
},
async requestPushPermission() {
if (_reactNative.Platform.OS === 'android') {
const result = await permissionModule.requestNotifications([]);
return result.status === 'granted';
}
if (_reactNative.Platform.OS === 'ios') {
const status = modularMessaging ? await modularMessaging.requestPermission(messaging) : await messaging.requestPermission();
return authorizedStatus.includes(status);
}
return false;
},
onTokenRefresh(handler) {
if (modularMessaging) {
return modularMessaging.onTokenRefresh(messaging, token => {
if (_reactNative.Platform.OS === 'android') handler(token);
});
}
return messaging.onTokenRefresh(token => {
if (_reactNative.Platform.OS === 'android') handler(token);
});
}
};
};
var _default = exports.default = createNativeNotificationService;
//# sourceMappingURL=createNotificationService.native.js.map