diff --git a/android/app/build.gradle b/android/app/build.gradle index ef59c2ac4..304191471 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -66,8 +66,10 @@ android { buildTypes { debug { signingConfig signingConfigs.debug - applicationIdSuffix ".debug" - versionNameSuffix "-debug" + // #Pangea - this causes errors with android debug build + // applicationIdSuffix ".debug" + // versionNameSuffix "-debug" + // Pangea# } release { signingConfig signingConfigs.release diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 6d31bf6f9..56e2c09cc 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -3339,7 +3339,12 @@ "downloadTxtFile": "Download Text File", "downloadCSVFile": "Download CSV File", "promotionalSubscriptionDesc": "You currently have a lifetime promotional subscription. Message support@pangea.chat for help changing your subscription.", - "originalSubscriptionPlatform": "Subscription purchased through", + "originalSubscriptionPlatform": "Subscription purchased through {purchasePlatform}", + "@originalSubscriptionPlatform": { + "placeholders": { + "purchasePlatform": {} + } + }, "oneWeekTrial": "One Week Trial", "creatingSpacePleaseWait": "Creating space. Please wait...", "downloadXLSXFile": "Download Excel File", @@ -3937,5 +3942,11 @@ "searchChatsRooms": "Search for #chats, @users...", "groupName": "Group name", "createGroupAndInviteUsers": "Create a group and invite users", - "groupCanBeFoundViaSearch": "Group can be found via search" + "groupCanBeFoundViaSearch": "Group can be found via search", + "trialExpiration": "Your free trial expires on {expiration}", + "@trialExpiration": { + "placeholders": { + "expiration": {} + } + } } diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart index 6b10cd43f..e93fd1891 100644 --- a/lib/config/app_config.dart +++ b/lib/config/app_config.dart @@ -1,11 +1,10 @@ // Dart imports: import 'dart:ui'; -// Package imports: -import 'package:matrix/matrix.dart'; - // Project imports: import 'package:fluffychat/pangea/config/environment.dart'; +// Package imports: +import 'package:matrix/matrix.dart'; abstract class AppConfig { // #Pangea @@ -124,6 +123,7 @@ abstract class AppConfig { "https://buy.stripe.com/test_bIY6ssd8z5Uz8ec8ww"; static String iosPromoCode = "https://apps.apple.com/redeem?ctx=offercodes&id=1445118630&code="; + static String trialSubscriptionId = "pangea_new_user_trial"; // Pangea# static void loadFromJson(Map json) { diff --git a/lib/pangea/controllers/subscription_controller.dart b/lib/pangea/controllers/subscription_controller.dart index 1ade5895a..a3b05b8b3 100644 --- a/lib/pangea/controllers/subscription_controller.dart +++ b/lib/pangea/controllers/subscription_controller.dart @@ -2,17 +2,8 @@ import 'dart:async'; import 'dart:convert'; -// Flutter imports: -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; - // Package imports: import 'package:adaptive_dialog/adaptive_dialog.dart'; -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:http/http.dart'; -import 'package:purchases_flutter/purchases_flutter.dart'; -import 'package:url_launcher/url_launcher_string.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/base_controller.dart'; @@ -26,6 +17,12 @@ import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/firebase_analytics.dart'; import 'package:fluffychat/pangea/widgets/subscription/subscription_paywall.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:http/http.dart'; +import 'package:purchases_flutter/purchases_flutter.dart'; +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionController extends BaseController { late PangeaController _pangeaController; @@ -63,6 +60,9 @@ class SubscriptionController extends BaseController { : MobileSubscriptionInfo(pangeaController: _pangeaController); await subscription!.configure(); + if (!isSubscribed) { + addNewAccountTrial(); + } initialized = true; @@ -78,6 +78,33 @@ class SubscriptionController extends BaseController { } } + void addNewAccountTrial() { + // determine when profile was created + final String? profileCreatedAt = + _pangeaController.userController.userModel?.profile?.createdAt; + if (profileCreatedAt == null) { + ErrorHandler.logError( + m: "Null profileCreatedAt in addNewAccountTrial", + s: StackTrace.current, + ); + return; + } + + final DateTime creationTimestamp = DateTime.parse(profileCreatedAt); + final bool accountIsNew = creationTimestamp.isAfter( + DateTime.now().subtract(const Duration(days: 7)), + ); + + // if account qualifies, grant trial + if (accountIsNew) { + final int daysRemaining = DateTime.now() + .add(const Duration(days: 7)) + .difference(creationTimestamp) + .inDays; + subscription?.setTrial(daysRemaining); + } + } + Future updateCustomerInfo() async { if (subscription == null) { ErrorHandler.logError( @@ -91,8 +118,10 @@ class SubscriptionController extends BaseController { setState(); } - Future showPaywall(BuildContext context, - [bool forceShow = false]) async { + Future showPaywall( + BuildContext context, [ + bool forceShow = false, + ]) async { try { if (!initialized) { await initialize(); @@ -160,8 +189,10 @@ class SubscriptionController extends BaseController { } void submitSubscriptionChange( - SubscriptionDetails? selectedSubscription, BuildContext context, - {bool isPromo = false}) async { + SubscriptionDetails? selectedSubscription, + BuildContext context, { + bool isPromo = false, + }) async { if (selectedSubscription != null) { if (kIsWeb) { if (selectedSubscription.duration == null) { @@ -191,7 +222,9 @@ class SubscriptionController extends BaseController { } try { GoogleAnalytics.beginPurchaseSubscription( - selectedSubscription, context); + selectedSubscription, + context, + ); await Purchases.purchasePackage(selectedSubscription.package!); GoogleAnalytics.updateUserSubscriptionStatus(true); } catch (err) { diff --git a/lib/pangea/models/base_subscription_info.dart b/lib/pangea/models/base_subscription_info.dart index 82540cecc..a6e7a1934 100644 --- a/lib/pangea/models/base_subscription_info.dart +++ b/lib/pangea/models/base_subscription_info.dart @@ -1,4 +1,5 @@ // Project imports: +import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/repo/subscription_repo.dart'; @@ -45,6 +46,9 @@ class SubscriptionInfo { allProducts = await SubscriptionRepo.getAllProducts(); } + bool get isNewUserTrial => + currentSubscriptionId == AppConfig.trialSubscriptionId; + bool get currentSubscriptionIsPromotional => currentSubscriptionId?.startsWith("rc_promo") ?? false; @@ -71,5 +75,16 @@ class SubscriptionInfo { currentSubscriptionId = null; } + void setTrial(int daysRemaining) { + if (currentSubscription != null) return; + expirationDate = DateTime.now().add(Duration(days: daysRemaining)); + currentSubscriptionId = AppConfig.trialSubscriptionId; + currentSubscription = SubscriptionDetails( + price: 0, + id: AppConfig.trialSubscriptionId, + periodType: 'trial', + ); + } + Future setCustomerInfo() async {} } diff --git a/lib/pangea/pages/settings_subscription/settings_subscription.dart b/lib/pangea/pages/settings_subscription/settings_subscription.dart index ddd67ff87..ca68bbf59 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription.dart +++ b/lib/pangea/pages/settings_subscription/settings_subscription.dart @@ -1,12 +1,6 @@ // Dart imports: import 'dart:async'; -// Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:url_launcher/url_launcher_string.dart'; - // Project imports: import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pangea/config/environment.dart'; @@ -15,9 +9,13 @@ import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription_view.dart'; import 'package:fluffychat/pangea/utils/subscription_app_id.dart'; import 'package:fluffychat/widgets/matrix.dart'; +// Flutter imports: +import 'package:flutter/material.dart'; +// Package imports: +import 'package:url_launcher/url_launcher_string.dart'; class SubscriptionManagement extends StatefulWidget { - const SubscriptionManagement({Key? key}) : super(key: key); + const SubscriptionManagement({super.key}); @override SubscriptionManagementController createState() => @@ -57,6 +55,10 @@ class SubscriptionManagementController extends State { ?.currentSubscriptionIsPromotional ?? false; + bool get isNewUserTrial => + pangeaController.subscriptionController.subscription?.isNewUserTrial ?? + false; + bool get showManagementOptions { if (!currentSubscriptionAvailable) { return false; diff --git a/lib/pangea/pages/settings_subscription/settings_subscription_view.dart b/lib/pangea/pages/settings_subscription/settings_subscription_view.dart index dbcdf4166..538aa8bc9 100644 --- a/lib/pangea/pages/settings_subscription/settings_subscription_view.dart +++ b/lib/pangea/pages/settings_subscription/settings_subscription_view.dart @@ -1,10 +1,4 @@ // Flutter imports: -import 'package:flutter/material.dart'; - -// Package imports: -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:intl/intl.dart'; - // Project imports: import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; @@ -12,11 +6,15 @@ import 'package:fluffychat/pangea/pages/settings_subscription/change_subscriptio import 'package:fluffychat/pangea/pages/settings_subscription/settings_subscription.dart'; import 'package:fluffychat/widgets/layouts/max_width_body.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +// Package imports: +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:intl/intl.dart'; class SettingsSubscriptionView extends StatelessWidget { final SubscriptionManagementController controller; final PangeaController pangeaController = MatrixState.pangeaController; - SettingsSubscriptionView(this.controller, {Key? key}) : super(key: key); + SettingsSubscriptionView(this.controller, {super.key}); @override Widget build(BuildContext context) { @@ -87,7 +85,7 @@ class SettingsSubscriptionView extends StatelessWidget { controller: controller, subscriptionController: pangeaController.subscriptionController, - ) + ), ], ), ), @@ -103,50 +101,49 @@ class ManagementNotAvailableWarning extends StatelessWidget { const ManagementNotAvailableWarning({ required this.controller, required this.subscriptionController, - Key? key, - }) : super(key: key); + super.key, + }); @override Widget build(BuildContext context) { - final bool currentSubscriptionAvailable = - controller.currentSubscriptionAvailable; - final bool currentSubscriptionIsPromotional = - controller.currentSubscriptionIsPromotional; - final String? purchasePlatformDisplayName = - controller.purchasePlatformDisplayName; - final bool isLifetimeSubscription = - subscriptionController.subscription?.isLifetimeSubscription ?? false; - final DateTime? expirationDate = - subscriptionController.subscription?.expirationDate; - - String warningText = L10n.of(context)!.subscriptionManagementUnavailable; - final DateFormat formatter = DateFormat('yyyy-MM-dd'); - - if (currentSubscriptionAvailable) { - warningText = L10n.of(context)!.subsciptionPlatformTooltip; - } else if (currentSubscriptionIsPromotional) { - if (isLifetimeSubscription) { - warningText = L10n.of(context)!.promotionalSubscriptionDesc; - } else { - warningText = L10n.of(context)!.promoSubscriptionExpirationDesc( - formatter.format(expirationDate!), + String getWarningText() { + final DateFormat formatter = DateFormat('yyyy-MM-dd'); + if (controller.isNewUserTrial) { + return L10n.of(context)!.trialExpiration( + formatter.format( + subscriptionController.subscription!.expirationDate!, + ), + ); + } + if (controller.currentSubscriptionAvailable) { + String warningText = L10n.of(context)!.subsciptionPlatformTooltip; + if (controller.purchasePlatformDisplayName != null) { + warningText += + "\n${L10n.of(context)!.originalSubscriptionPlatform(controller.purchasePlatformDisplayName!)}"; + } + return warningText; + } + if (controller.currentSubscriptionIsPromotional) { + if (subscriptionController.subscription?.isLifetimeSubscription ?? + false) { + return L10n.of(context)!.promotionalSubscriptionDesc; + } + return L10n.of(context)!.promoSubscriptionExpirationDesc( + formatter.format( + subscriptionController.subscription!.expirationDate!, + ), ); } + return L10n.of(context)!.subscriptionManagementUnavailable; } return Center( - child: Column( - children: [ - Text( - warningText, - textAlign: TextAlign.center, - ), - if (purchasePlatformDisplayName != null) - Text( - "${L10n.of(context)!.originalSubscriptionPlatform} $purchasePlatformDisplayName", - textAlign: TextAlign.center, - ), - ], + child: Padding( + padding: const EdgeInsets.all(20), + child: Text( + getWarningText(), + textAlign: TextAlign.center, + ), ), ); } diff --git a/needed-translations.txt b/needed-translations.txt index 0aa15d865..4014d92ab 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -755,7 +755,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "bn": [ @@ -1519,7 +1520,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "bo": [ @@ -2283,7 +2285,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ca": [ @@ -3042,7 +3045,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "cs": [ @@ -3801,7 +3805,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "de": [ @@ -4560,7 +4565,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "el": [ @@ -5324,7 +5330,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "eo": [ @@ -6083,7 +6090,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "es": [ @@ -6106,7 +6114,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "et": [ @@ -6865,7 +6874,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "eu": [ @@ -7624,7 +7634,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "fa": [ @@ -8383,7 +8394,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "fi": [ @@ -9142,7 +9154,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "fr": [ @@ -9901,7 +9914,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ga": [ @@ -10660,7 +10674,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "gl": [ @@ -11419,7 +11434,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "he": [ @@ -12178,7 +12194,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "hi": [ @@ -12942,7 +12959,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "hr": [ @@ -13701,7 +13719,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "hu": [ @@ -14460,7 +14479,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "id": [ @@ -15219,7 +15239,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ie": [ @@ -15980,7 +16001,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "it": [ @@ -16739,7 +16761,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ja": [ @@ -17498,7 +17521,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ko": [ @@ -18257,7 +18281,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "lt": [ @@ -19016,7 +19041,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "lv": [ @@ -19780,7 +19806,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "nb": [ @@ -20539,7 +20566,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "nl": [ @@ -21298,7 +21326,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pl": [ @@ -22057,7 +22086,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pt": [ @@ -22821,7 +22851,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pt_BR": [ @@ -23580,7 +23611,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "pt_PT": [ @@ -24339,7 +24371,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ro": [ @@ -25098,7 +25131,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ru": [ @@ -25857,7 +25891,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sk": [ @@ -26617,7 +26652,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sl": [ @@ -27379,7 +27415,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sr": [ @@ -28138,7 +28175,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "sv": [ @@ -28897,7 +28935,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "ta": [ @@ -29661,7 +29700,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "th": [ @@ -30425,7 +30465,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "tr": [ @@ -31184,7 +31225,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "uk": [ @@ -31943,7 +31985,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "vi": [ @@ -32705,7 +32748,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "zh": [ @@ -33464,7 +33508,8 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ], "zh_Hant": [ @@ -34223,6 +34268,7 @@ "searchChatsRooms", "groupName", "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch" + "groupCanBeFoundViaSearch", + "trialExpiration" ] }