This fork of the UIKit does allow me to accomplish what we want, so we’ll move forward with that for now. Thank you!
]]>For now, this behavior is by design—when used standalone, AmityPostDetailPage may not fully inherit the UIKit styling.
We specifically had some logic like this:
{sharedPost && <AmityPostDetailPage id={sharedPost.postId} commentId={sharedPost.commentId} />}
{useForum && !sharedPost && <AmityUiKitSocial />}
The issue was that using the AmityPostDetailPage component directly had none of the styling that the AmityUiKitSocial provided us.
By forcing the UI Kit to expose the pushPage, PageTypesvalues from useAmityNavigation, I was able to push a PageTypes.PostDetailPage page to the navigation and use the AmityUiKitSocial to display everything.
I suppose my request is related to another post of mine here, Navigation Controller for PostDetailPage - #4 by mqm - that the developer should have more control over manipulating the navigation.
]]>In UIKit V4, file post functionality is not currently supported (e.g., PDF/file attachments). That’s why you may see it available in UIKit V3, but it does not appear in V4.
(1) Is there a setting preventing attached FILES from showing up in the UI Kit?
No — this is not related to a configuration or toggle. File attachments are simply not supported in UIKit V4 at the moment.
(2) Is there a way to attach files in the UI Kit?
Not out of the box in V4. However, clients who would like to use file posts can build this feature on top of UIKit V4 using our SDK and customize the frontend implementation according to their design requirements.
You can refer to the SDK documentation here:
If you need any further assistance, please let me know.
]]>PostDetailPage is designed to follow the same UI behavior as the homepage. If PostDetailPage appears to take up the entire screen, it’s because the screen size is being detected as a mobile display. In that case, UIKit automatically renders the mobile UI, and the homepage will also render in the mobile layout.
When UIKit is opened in desktop mode, PostDetailPage will display centered with grey side margins, consistent with the homepage layout.
Please refer to the example images below for reference (PostDetailPage on desktop screen vs. Home page in mobile screen).
]]>At the home page, the content is centered between non-scrollable grey bars. However, the PostDetailPage has no such restriction - by default the post detail takes up the whole screen.
Is there a QUICK, easy way to have the PostDetailPage have parity with the home page? i.e., centered with a max-width? We could of course add our own custom css that copies the settings in src/v4/social/layouts/Main/Main.module.css . I’m just wondering if there is a flag that could accomplish this - which would also have the advantage of tracking any style changes that may be made in the UIKit.
Feature parity between the PostDetailPage and the main layout would improve the user experience. Thank you!
]]>Our team is trying to understand file attachments on posts. In the Social+ console, we can create posts with image, video, and file attachments
However, I do note that attached files (e.g., PDFs) do NOT show up in the Amity UI Kit (and I’m pretty sure we have not toggled a setting that would prevent that).
Furthermore, it doesn’t look like attaching PDFs is possible with the components of the UI Kit. The component src/v4/social/internal-components/CreatePost/CreatePost.tsx looks to be the modal used to create a post, which can use either DetailedMediaAttachment or MediaAttachment as the components to create the media attachment component.
Whichever of these two components is used, I see them using CameraButton, ImageButton, and VideoButton - but NOT FileButton… which looks to not be used at all in the repo at the moment?

We’d like to understand this behavior
(1) is there a setting preventing attached FILES from showing up in the UI Kit?
(2) is there a way to attach files in the UI Kit?
Thank you
]]>excludes list, it won’t show up. Looks like our team had a ‘*/*/copy_link_button’ element in that array, so that answers my second question above. My first point I’m still curious about - it seems odd a copy post link is only available if NOT a part of a community.
]]>At the moment, Web UIKit is designed so that scrolling is scoped only to the center content container, which is why the grey side areas don’t scroll. That said, we agree this creates a usability gap, and we’ve logged it with our team as a UX backlog item for future improvement.
We truly appreciate you highlighting this.
]]>We are curious if it would be possible to allow the grey side bars of the main panel to scroll with the main content? Trying to customize this ourselves would require changes necessitating a fork of the Social+ UI Kit, and we are wary of introducing so many customizations. This is preferable to us over increasing width of the content within.
]]>I suppose its the 3rd paragraph where I’m unclear. When you say “your app’s navigation logic”, do you mean part of the config passed to the SocialPlus component, or logic we have to implement in our own app that uses that component?
If the latter case, do we need to add styling logic to hide the back button, or find a way to override the `onClick` for the back button?
]]>You’re absolutely right — with deep linking, our UIKit doesn’t currently backfill the navigation history automatically. This is by design, as the navigation stack initializes exclusively with the targeted route (e.g., PostDetailPage). Since the stack contains only that deep-linked page, there isn’t a previous page for the Back button to return to by default.
While Social+ generates the link, the in-app routing and back-stack management (such as defining a fallback destination like a community page or your main feed) currently needs to be handled within your app’s navigation logic.
I’ve also shared this as product feedback with our team, so we can explore improving native support for deep linking and back navigation in a future update.
]]>First off, we note there are TWO separate locations with DIFFERENT logic to display the copy link icon:
src/v4/social/internal-components/PostMenu/PostMenu.tsx, the CopyLink button is shown if the user is not part of the community:
119 const showCopyLinkButton = useMemo(() => {
120 if (post.targetType === 'user') return false;
121 if (community?.isPublic && !community?.isJoined) return true;
122 if (community?.isPublic && community?.isJoined) return false;
123 }, [post.targetType, community?.isJoined, community?.isPublic]);
src/v4/social/components/PostContent/PostContent.tsx, we show the CopyLink button only if there is no community, OR if the community is public:
(!targetCommunity || targetCommunity?.isPublic)
The two separate locations is confusing, but the fact the logic is different is more so. Why the separate cases?
I’d like to note that the button doesn’t appear to show up in the 2nd case above for a community that is public, even with post links enabled for a particular application and it’s child communities.
Can the decisions behind these two paths of logic be explained? And is there something I’m missing for our particular case where the button won’t show up in the PostMenu?
]]>We allow our users to share a link to a post, and it has a format like this:
`<BASE_URL>/#!/post/<POST_ID>`
Here, <BASE_URL> is the path to a page in our React app that embeds the UI Kit. We parse the hash (if it exists) to navigate the user to the PostDetailPage for a given postId.
The issue we are noticing is that a user can go to the provided URL fine, and the <BackButton …> component renders fine… but it just doesn’t do anything.
I’ve noticing in src/v4/core/providers/NavigationProvider.tsx of the UIKit the following initialization of pages:
const [pages, setPages] = useState<Page>([getDefaultRoute(activeRoute)]);
i.e., set the current PostDetail page as the only page in the navigation. This means the Back button component has nowhere to navigate to! Is there a way to seed the navigation provider with a page to go back to? Ideally, the back button can take the user to a community in the application that contains the given postId.
My understanding of the NavigationBehavior overrides is that they can replace existing functions. The issue here seems to be different - with only one page in the Navigation Provider, there is no function even called in the first place.
Please let me know if there is documentation I may have missed somewhere on this topic. I’m just trying to navigate some oddities as we implement this for our community members.
]]>/api/v3/comments{"referenceId":"wlc-2026-01-19","referenceType":"content","data":{"text":"Here is another comment."},"mentionees":[],"metadata":{"mentioned":[]}}
comment does have "referenceType": "content",, and the id/commentId is set to : "_id": "696fc0d80b1a94a57661c65b", "commentId": "696fc0d80b1a94a57661c65b",/api/v2/reactions{"referenceId":"696fc0d80b1a94a57661c65b","referenceType":"comment","reactionName":"like"}
referenceId above matches the id of the posted comment{
"status": "error",
"message": "reaction validation failed: targetId: Cast to ObjectId failed for value \"wlc-2026-01-19\" (type string) at path \"targetId\" because of \"BSONError\", targetType: `content` is not a valid enum value for path `targetType`.",
"code": 500000,
"data": {
"detail": []
}
}
Overall, it looks like the API is NOT accepting reactions on posts that have a referenceType of comment - but there is no obvious reason why that is the case.
However, if I turn off my ad blocker i Chrome, this log-in is successful.
]]>In the meantime, please use this branch, which is compatible with React Native 0.76 and above and has the livestream feature disabled:
]]>To assist with further investigation, could you please capture and share a HAR file from a session where the issue occurs, and send it to [email protected]?
Thank you for your cooperation.
]]>We will get back to you as soon as we have an update.
]]>I’m building a livestream feature in React Native with New Architecture (Fabric) enabled on iOS. I’ve tested two different RTMP streaming libraries and both have issues:
When using ApiVideoLiveStreamView, the component mounts and startStreaming(streamKey, rtmpUrl) is called successfully (no errors), but:
No actual RTMP connection is made to the server
Dashboard shows stream status as “idle” / “not started”
No onConnectionSuccess or onConnectionFailed callback is fired
Viewers see nothing
// This executes without error but nothing happens
liveStreamRef.current.startStreaming(streamKey, rtmpUrl);
console.log(“startStreaming called”); // This logs, but no callbacks fire
Logs show:
iOS: ApiVideoLiveStreamView camera preview should be ready
CALLING ApiVideoLiveStreamView.startStreaming() NOW…
iOS: ApiVideoLiveStreamView startStreaming() called
// … then nothing - no connection events, stream stays “idle”
When using NodePublisher, the RTMP streaming WORKS - viewers can see the video stream. However:
RTMP connection succeeds (code 2001)
Viewers CAN see the video feed
Camera preview does NOT render on streamer’s screen (black screen)
startPreview() executes but native preview layer doesn’t display on Fabric
directStreamRef.current.startPreview(); // Executes, but preview is black
directStreamRef.current.start(); // This works - viewers see video
Logs show:
iOS: NodePublisher ref SET for streaming
iOS: NodePublisher preview initialized
CALLING NodePublisher.start() NOW…
iOS NodePublisher Event: code=2001, msg=…success // CONNECTED!
iOS: NodePublisher RTMP CONNECTED! STREAM IS LIVE!
// Stream works for viewers, but streamer sees black screen
| Package | Version |
|---|---|
| React Native | 0.76.x |
| Expo [email protected] | 52 |
| @api.video/react-native-livestream | 2.0.2 |
| react-native-nodemediaclient | 0.3.4 |
| iOS | 17+ |
| New Architecture (Fabric) | Enabled |
| Hermes | Enabled |
Is @api.video/react-native-livestream compatible with React Native New Architecture (Fabric)? The startStreaming() method doesn’t seem to work at all.
For NodePublisher / react-native-nodemediaclient - is there a known issue with the native preview layer not rendering on Fabric? The streaming works but local preview doesn’t display.
Are there any workarounds or patches to make camera preview work on iOS with Fabric enabled?
Applied patches for Fabric compatibility (Swift header imports, optional unwrapping)
Tried both libraries independently
Verified camera permissions are granted
Tested on physical iOS device (not simulator)
Confirmed RTMP URL format is correct (works with NodePublisher)
Any help would be greatly appreciated! ![]()
Curiously, I WAS able to successfully login and access an application in Chrome. I have no script blocker enabled in this browser, but this works even if I re-enable the ad blocker (something I mentioned in my original post as something I had to turn off last month).
Nothing new has either changed in my environment, or on our team’s end with my account. Perchance some updates happened on your side?
]]>For bulk importing posts, stories, or comments, you will need to manage batching on your side by creating items one API call at a time, and apply throttling (controlled concurrency + retry/backoff) to stay within the standard rate limits.
]]>Additionally, could you check your browser’s cookie settings and ensure that third-party cookies are allowed?
Please also try disabling any ad blockers or script blockers and see if the issue persists.
]]>I’d also like to mention that I was able to attempt login with a coworker’s credentials (for you security-conscious, it was shared with me via a password manager and not in plaintext so I don’t actually know the credentials
) in Firefox, and still receive this same error. So it’s definitely possible there’s something with my environment that makes Social+ unhappy… I’m just unsure what it is.
Could you please try accessing the Console using a different browser, or log out and log back in again? It’s possible that the session in the portal may have expired before navigating to the Console.
Please let us know if the issue persists after trying the above steps.
]]>Thank you.
]]>When logged into the Social+ Portal, I click on “Go to console” under an application:
After clicking, I am eventually led to a login page (previously, it would lead me to the application. Trying to login with my exact same Social+ credentials leads me to this error:
What can I do to access our org’s applications? I’m already logged in, so something on the backend must have changed in the recent past to b
]]>await AmityCoreClient.setup(
option: AmityCoreClientOption(
apiKey: AmityEnv.apiKey,
httpEndpoint: AmityEnv.httpEndpoint,
mqttEndpoint: AmityEnv.mqttEndpoint,
showLogs: true,
),
sycInitialization: true,
);
Here are my env variables
// SDK endpoints for CoreClient static const AmityRegionalHttpEndpoint httpEndpoint = AmityRegionalHttpEndpoint.SG; static const AmityRegionalMqttEndpoint mqttEndpoint = AmityRegionalMqttEndpoint.SG;
Here is how I am logging in my user:
final currentUser = FirebaseAuth.instance.currentUser;
if(currentUser!=null){
await AmityCoreClient.login(currentUser.uid) .displayName(currentUser.displayName ?? '') .submit();
}
I am using firebase for user authentication and amity sdk in Flutter.
This will help our team check the issue more accurately.
]]>This will help our team verify whether the connection flow are set up correctly.
]]>.p8 key:
Please make sure all steps are completed (App ID, bundle ID, APNs key, and environment setup).
If the issue still occurs after this, feel free to update us with your findings.
]]>.listen() but receiving end gets nothing in the stream:dart
// Getting channels
final channelQuery = AmityChatClient.newChannelRepository()
.getChannels()
.sortBy(AmityChannelSortOption.LAST_ACTIVITY);
final channelLiveCollection = channelQuery.getLiveCollection();
final channelStreamController = channelLiveCollection.getStreamController();
channelStreamController.stream.listen((channels) {
// This receives initial data but NOT real-time updates
// When new message arrives in any channel, this doesn't trigger
print('Channels updated: ${channels.length}');
});
channelLiveCollection.loadNext();
// Getting messages
final messageQuery = AmityChatClient.newMessageRepository()
.getMessages(channelId);
final messageLiveCollection = messageQuery.getLiveCollection();
final messageStreamController = messageLiveCollection.getStreamController();
messageStreamController.stream.listen((messages) {
// This loads initial messages but doesn't receive new messages
// When another user sends a message, this listener is NOT triggered
// Nothing is being received in onListen callback
print('Messages received: ${messages.length}');
});
messageLiveCollection.loadNext();
Issue: The .listen() callback receives initial data but doesn’t get triggered when:
Another user sends a new message in the channel
A message is sent from another device
Any real-time update occurs
In the receiving end, onListen receives nothing - no new messages appear automatically.
2. iOS Push Notifications Not Working
Updated .p8 certificate in Social Plus Console
Notifications still not being received on iOS devices
Android notifications working fine