A Flutter plugin to use iOS real-time connection SharePlay on a FaceTime call
A Flutter plugin to use iOS 15.0+ real-time connection SharePlay on a FaceTime call π₯.
π§ What is it ?
This plugin use official iOS GroupActivities API.
share_play can be used to communicate data over devices in a Flutter apps using iOS SharePlay features.
Why using iOS SharePlay?
- β‘οΈ Itβs fast.
- π Reliable (using Apple server).
- π° Itβs βfreeβ (including in your paid Apple Developer subscription).
- π Very easy to implement (in 3 lines of code you can share data!).
- π Works accros iOS, macOS & tvOS.
β οΈ share_play is only intended to use with iOS 15.0+! It will simply do nothing on other platform & < iOS 15.0
π» Getting started
βΉοΈ You can check into the example repository for a full example.
- Open the Xcode workspace project
ios/Runner.xcworkspace
. - Enable βGroup Activitiesβ capabilities on the main
Runner
app.
- Import
share_play
& create an instance of the Plugin.
import 'package:shareplay/shareplay.dart';
// [...]
final _shareplayPlugin = SharePlay();
βΉοΈ Quick start
- Add listener when a new message is received (in
initState()
method for ex).
@override
void initState() {
super.initState();
// [...]
_shareplayPlugin.dataStream().listen((data) {
// do what you want here :)
});
}
- Start a new activity π.
_shareplayPlugin.start(title: 'My Activity');
- Join activity from another device π².
_shareplayPlugin.join();
βΉοΈ By tapping on the
SharePlay
banner on top of the screen, you donβt need to calljoin()
method!
- Send your first message.
_shareplayPlugin.send('Hello from Flutter');
βΉοΈ For more, check documentation below or example.
π Documentation
Name | Description | Returned value |
---|---|---|
.start() |
Create an activity when a FaceTime call is active | Future<bool> State of the new activity is created or not |
.join() |
Starts the shared activity on the current device, not necessary if user tap on the SharePlay banner |
Future When a new activity was joined |
.localParticipant() |
Use this property to differentiate the participant on the current device from participants on other devices | Future<SPParticipant?> The participant on the current device including participant id |
.end() |
Ends the activity for the entire group | Future When the activity was stopped |
.leave() |
Leaves the current activity | Future When the activity was leaved |
.send() |
Send a message to all other participants | Future When the message was sent |
.currentSession() |
Get the current session on the device | Future<SPSession?> Current session including session id & activity title |
.dataStream() |
The stream of messages received from other participants | Stream<SPDataModel> Source participant & message data |
.newSessionStream() |
A stream of all created sessions | Stream<SPSession> Created session including session id & activity title |
.participantsStream() |
A stream of all active participants in the current session | Stream<List<SPParticipant>> All active participants in the activity |
.sessionStateStream() |
A stream of the current session state. | Stream<SPSessionState> Session state (SPSessionState.waiting , SPSessionState.joined or SPSessionState.invalidated ) |
π₯ Contributions
Contributions are welcome. Contribute by creating a PR or create an issue π.
π― Roadmap
- Add method to check if SharePlay is available.
- Display a custom error when SharePlay is not available on older iOS version.
- Implement
prepareForActivation()
method. - Create stream to handle message data & new session created.
- Get local data like participant & session state.
- Leave & end activity.
- Send a message accros SharePlay.
- Join an activity.
- Start a new activity.