π¦ GravitySDK for Flutter
GravitySDK β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΉ Π² ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
Flutter-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΎΡΠΌΠ°ΡΠ°Ρ
(ΠΌΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΏΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ, bottom sheet).
π ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅
- β¨ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- π Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
- βοΈ ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
- π§ ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ initialize
- π¨ ProductWidgetBuilder β ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²
- π§ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
- π ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ±ΡΡΠΈΡ
- π ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
- π§© ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
- πΌοΈ ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
- β ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ SDK Ρ ΠΊΠ»ΡΡΠΎΠΌ API ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ΅ΠΊΡΠΈΠΈ
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈ ΠΏΡΠΎΠΊΡΠΈ
- ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΡΡΡΠ°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ
- ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° Π²:
- ΠΠΎΠ΄Π°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΠ½Π΅
- Bottom sheet
- ΠΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
- Bottom sheet Ρ ΡΡΠ΄ΠΎΠΌ ΡΠΎΠ²Π°ΡΠΎΠ²
- ΠΡΠΏΡΠ°Π²ΠΊΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠΎΠ±Π°Π²Ρ ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠ°ΠΉΠ» pubspec.yaml:
dependencies:
gravity_sdk: ^0.8.0
ΠΠ°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
flutter pub get
Π ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠ²ΠΎΡΠΌ ΠΊΠΎΠ΄Π΅:
import 'package:gravity_sdk/gravity_sdk.dart';
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ SDK Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ apiKey ΠΈ section. ΠΡ
ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² Π»ΠΈΡΠ½ΠΎΠΌ ΠΊΠ°Π±ΠΈΠ½Π΅ΡΠ΅.
await GravitySDK.instance.initialize(
apiKey: 'api-key',
section: 'section',
);
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ initialize
Future<void> initialize({
required String apiKey,
required String section,
ProductWidgetBuilder? productWidgetBuilder,
GravityEventCallback? gravityEventCallback,
bool useAdvertisingId = false,
});
productWidgetBuilderβ ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΊΠ°ΡΡΠΎΡΠ΅ΠΊ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²gravityEventCallbackβ ΠΊΠΎΠ»Π±ΡΠΊ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΈ ΡΡΠ΅ΠΊΠΈΠ½Π³Π΅ ΡΠΎΠ±ΡΡΠΈΠΉuseAdvertisingIdβ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΠ»Π°ΠΌΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°
ProductWidgetBuilder β ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²
ProductWidgetBuilder β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠ°ΡΡΠΎΡΠ΅ΠΊ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΉ. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΠΎΠ²Π°ΡΠΎΠ², ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΡΡΠΈΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ?
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ°ΠΌΠΏΠ°Π½ΠΈΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ SDK, ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΎΠ²Π°ΡΡ, Π°ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ). Π§ΡΠΎΠ±Ρ ΡΡΠΈ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ Π²ΠΏΠΈΡΡΠ²Π°Π»ΠΈΡΡ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, SDK ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ProductWidgetBuilder.
ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°ΡΡ productWidgetBuilder, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: DefaultProductWidgetBuilder.
π¦ ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
class MyCustomProductWidgetBuilder extends ProductWidgetBuilder {
@override
Widget build(Slot slot) {
final item = slot.item;
return Card(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
margin: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (item.imageUrl != null)
ClipRRect(
borderRadius: BorderRadius.vertical(top: Radius.circular(12)),
child: Image.network(
item.imageUrl!,
height: 160,
width: double.infinity,
fit: BoxFit.cover,
),
),
Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (item.isNew == 'true')
Padding(
padding: const EdgeInsets.only(bottom: 4.0),
child: Text(
'π₯ ΠΠΎΠ²ΠΈΠ½ΠΊΠ°',
style: TextStyle(color: Colors.red, fontWeight: FontWeight.bold),
),
),
Text(
item.name,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
SizedBox(height: 4),
Text(
'${item.price}',
style: TextStyle(fontSize: 14, color: Colors.black87),
),
if (item.oldPrice != null)
Text(
'${item.oldPrice}',
style: TextStyle(
fontSize: 12,
color: Colors.grey,
decoration: TextDecoration.lineThrough,
),
),
SizedBox(height: 8),
if (item.inStock != null)
Text(
item.inStock! ? 'Π Π½Π°Π»ΠΈΡΠΈΠΈ' : 'ΠΠ΅Ρ Π² Π½Π°Π»ΠΈΡΠΈΠΈ',
style: TextStyle(
fontSize: 12,
color: item.inStock! ? Colors.green : Colors.red,
),
),
],
),
),
],
),
);
}
}
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ³ΠΎ builderβΠ° ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ SDK:
await GravitySDK.instance.initialize(
apiKey: 'your-api-key',
section: 'your-section-id',
productWidgetBuilder: MyCustomProductWidgetBuilder(),
);
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
GravitySDK.instance.setUser('user-id', 'session-id');
GravitySDK.instance.setOptions(
options: Options(...),
contentSettings: ContentSettings(...),
proxyUrl: 'https://your-proxy.com',
);
ΠΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ±ΡΡΠΈΡ
await GravitySDK.instance.trackView(
pageContext: PageContext(...),
);
await GravitySDK.instance.triggerEvent(
events: [TriggerEvent(...)],
pageContext: PageContext(...),
);
ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
GravitySDK.instance.sendContentEngagement(ContentImpressionEngagement(...));
GravitySDK.instance.sendProductEngagement(ProductClickEngagement(...));
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
final content = await GravitySDK.instance.getContent('template-id');
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°
ΠΠΎΠ΄Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
GravitySDK.instance.showModalContent(context, content);
Bottom Sheet
GravitySDK.instance.showBottomSheetContent(context, content);
Bottom Sheet: Π ΡΠ΄ ΡΠΎΠ²Π°ΡΠΎΠ²
GravitySDK.instance.showBottomSheetProductsRow(context, content);
ΠΠΎΠ»Π½ΠΎΡΠΊΡΠ°Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ
GravitySDK.instance.showFullScreenContent(context, content);
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ SDK Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅:
GravitySDK is not initialized. Call initialize() first.