**If youβd like to use React Native Expo, please visit this repository (https://github.com/AmityCo/Amity-Social-UIKit-React-Native-OpenSource) **
Our AmityUIKit include user interfaces to enable fast integration of standard Amity Social features into new or existing applications. Furthermore, our React Native UIKit supports integration with React Native CLI, providing you with a flexible experience to seamlessly integrate social features into your existing React Native application.
#Minimum Requirements
- node 20.19.4
- JDK 17.0.10
- ruby 3.2.0
- XCode 15
This repository also includes a built-in sample app which you can use to test your code while customizing it, or even explore our UIKit features with just a few installations!
Use yarn
- Install packages
cd example
yarn
- Sample app is using firebase push notification. you need to setup firebase project by your own firebase project to get credentials.
- Setup firebase project: https://console.firebase.google.com/ for react native android and ios.
- Download google-services.json and GoogleService-Info.plist.
- Copy and paste to /example/android/app/google-services.json and /example/ios/GoogleService-Info.plist.
- More detail about push notification - https://docs.amity.co/amity-uikit/uikit-v4-beta/installation-guide/react-native#push-notification
-
Configure your apiKey,apiRegion,apiEndpoint,userId,displayName,fcmToken in /example/src/App.tsx file(https://github.com/AmityCo/Amity-Social-UIKit-React-Native-CLI-OpenSource/blob/main/example/src/App.tsx) first before run the sample app.
-
Go back to your root folder (
cd ..) and Choose to run between iOS or Android -
Install modules and sync file
yarn- Run sample app
yarn example iosor
yarn example android
Here are the steps to install ui-kit together with another React Native project.
1. git clone https://github.com/AmityCo/Amity-Social-UIKit-React-Native-CLI-OpenSource.git
2. cd Amity-Social-Cloud-UIKit-React-Native-OpenSource
3. yarn or npm install
4. npm packThis step will build the app and return amityco-asc-react-native-ui-kit-x.x.x.tgz file in inside the folder
Then, inside another project, Copy tgz file to your application folder where you need to use ui-kit:
1. yarn add ./amity-react-native-social-ui-kit-x.x.x.tgz
2. yarn add react-native-safe-area-context react-native-image-picker @react-native-async-storage/async-storage react-native-svg react-native-gesture-handler react-native-screens react-native-video react-native-compressor @react-native-community/netinfo @react-navigation/native \@react-navigation/native-stack @react-navigation/stack react-native-vision-camera react-native-get-random-values react-native-vlc-media-player [email protected] @react-native-community/datetimepicker react-native-video-controls @amityco/ts-sdk-react-native @babel/plugin-transform-export-namespace-from metro-react-native-babel-preset react-native-linear-gradientmodule.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
'@babel/plugin-transform-export-namespace-from',
],
};In Pod file, add these lines under your target,
pod 'SPTPersistentCache', :modular_headers => true
pod 'DVAssetLoaderDelegate', :modular_headers => true
$RNVideoUseVideoCaching = true
In XCode,
Set Minimum Deployments at least iOS 12.0
npx pod-install
Build project gradle with your Android Studio
In android/build.gradle, add belows in in buildscript > ext
kotlinVersion = 1.7.0 and above compileSdkVersion = 34 buildToolsVersion = "34.0.0"
Add following permissions to info.plist file (ios/{YourAppName}/Info.plist)
<key>NSCameraUsageDescription</key>
<string>App needs access to the camera to take photos.</string>
<key>NSMicrophoneUsageDescription</key>
<string>App needs access to the microphone to record audio.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App needs access to the gallery to select photos.</string>Add following permissions to AndroidManifest.xml file (android/app/src/main/AndroidManifest.xml)
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />import * as React from 'react';
import {
AmityUiKitSocial,
AmityUiKitProvider,
} from 'amity-react-native-social-ui-kit';
export default function App() {
return (
<AmityUiKitProvider
apiKey="API_KEY"
apiRegion="API_REGION"
userId="userId"
displayName="displayName"
apiEndpoint="https://api.{API_REGION}.amity.co"
>
<AmityUiKitSocial />
</AmityUiKitProvider>
);
}UIKit now supports importing and rendering individual screens. This gives you more control over how each screen is used in your app, making it easier to customize user flows and place screens exactly where you need them.
You can import and use the following screens individually in your application:
- CommunityProfilePage
- PostDetail
- UserProfile
- AmityGlobalFeedComponent
- AmityStoryTabComponent
- AmityExploreComponent
β Make sure your screen component is wrapped with
AmityPageRendererat the root level.β
AmityPageRendereris only required for screen components. It is not needed when usingAmityUiKitSocial.
| Component | Required Props | Notes |
|---|---|---|
CommunityHome |
defaultCommunityId: string |
Community to display |
PostDetail |
defaultPostId: string |
Post Detail page to display |
AmityExploreComponent |
- | Explore page to display |
UserProfile |
defaultUserId: string , isShowBackButton?: boolean |
User profile to display |
AmityGlobalFeedComponent |
isShowStoryTab: boolean |
default value of isShowStoryTab is true |
AmityStoryTabComponent |
type: AmityStoryTabComponentEnum |
This component should be wrapped with <AmityGlobalStoryTabWrapper> The targetId is required only when the type is set to AmityStoryTabComponentEnum.communityFeed. For the global story tab component, use the type set to AmityStoryTabComponentEnum.globalFeed |
import * as React from 'react';
import config from './uikit.config.json';
import {
AmityUiKitProvider,
AmityUiKitSocial,
AmityPageRenderer,
AmityExploreComponent,
PostDetail,
CommunityHome,
UserProfile,
} from 'amity-react-native-social-ui-kit';
export default function App() {
return (
<AmityUiKitProvider
configs={config}
apiKey="API_KEY"
apiRegion="API_REGION"
userId="userId"
displayName="displayName"
>
<AmityPageRenderer>
<CommunityHome defaultCommunityId={'communityID'} />
</AmityPageRenderer>
</AmityUiKitProvider>
);
}import * as React from 'react';
import config from './uikit.config.json';
import {
AmityStoryTabComponent,
AmityStoryTabComponentEnum,
AmityStoryTabComponentStyle,
AmityGlobalStoryTabWrapper
} from 'amity-react-native-social-ui-kit';
export default function App() {
return (
<AmityUiKitProvider
configs={config}
apiKey="API_KEY"
apiRegion="API_REGION"
userId="userId"
displayName="displayName"
>
<AmityGlobalStoryTabWrapper>
<AmityPageRenderer>
<AmityStoryTabComponent type={AmityStoryTabComponentEnum.globalFeed} />
</AmityPageRenderer>
</AmityGlobalStoryTabWrapper>
</AmityUiKitProvider>
);
}Our UIKit v4 supports customization in a single place by modifying a uikit.config.json file in related UIKit repository. This configuration file includes all necessary data to customize the appearance of each pages, components and elements that we allow to do customization.
Note: uikit.config.json file should be in your project. Please kindly check in example project.
import * as React from 'react';
import {
AmityUiKitSocial,
AmityUiKitProvider,
} from 'amity-react-native-social-ui-kit';
import config from './uikit.config.json';
export default function App() {
return (
<AmityUiKitProvider
configs={config} //put your customized config json object
apiKey="API_KEY"
apiRegion="API_REGION"
userId="userId"
displayName="displayName"
apiEndpoint="https://api.{API_REGION}.amity.co"
>
<AmityUiKitSocial />
</AmityUiKitProvider>
);
}AmityUIKit uses the default theme as part of the design language.
Without customization, the UIKit already looks good. However, if you wish to customize the theme, you can declare changes to color variables by passing your own color codes to our uikit.config.json. Here is the code usage of how to customize the theme.
"preferred_theme": "default",
"theme": {
"light": {
"primary_color": "#1054DE",
"secondary_color": "#292B32",
"base_color": "#292b32",
"base_shade1_color": "#636878",
"base_shade2_color": "#898e9e",
"base_shade3_color": "#a5a9b5",
"base_shade4_color": "#ebecef",
"alert_color": "#FA4D30",
"background_color": "#FFFFFF"
},
"dark": {
"primary_color": "#1054DE",
"secondary_color": "#292B32",
"base_color": "#ebecef",
"base_shade1_color": "#a5a9b5",
"base_shade2_color": "#6e7487",
"base_shade3_color": "#40434e",
"base_shade4_color": "#292b32",
"alert_color": "#FA4D30",
"background_color": "#191919"
}
},The Dark Mode feature in our UIKit enhances user experience by providing an alternative visual style that is particularly beneficial in low-light environments. It's designed to reduce eye strain, improve readability, and offer a more visually comfortable interface. You can enable dark mode by just changing preferred_theme: "default" to the preferred_theme: "dark" in uikit.config.json
"preferred_theme": "dark" // change it to dark || light || default,Please refer to our online documentation at https://docs.amity.co or contact a Ui-Kit representative at [email protected] for support.
-
Upgrade the following dependencies to the exact versions specified in the
package.jsonof UIKit:@react-navigation/native:x.x.x@react-navigation/native-stack:x.x.x@react-navigation/stack:x.x.xreact-native-screens:x.x.x
-
Replace
independent={true}inNavigationContainerwithNavigationIndependentTree. This ensures proper navigation context isolation for nested navigators.
Before:
<NavigationContainer independent={true}>
{/* Your navigators */}
</NavigationContainer>After:
<NavigationIndependentTree>
<NavigationContainer>{/* Your navigators */}</NavigationContainer>
</NavigationIndependentTree>Please refer to full migration guide from official website for other breaking changes in your application
