Skip to content

Commit 2930069

Browse files
committed
notif: Use live value for app ID on registering APNs token
`await ZulipBinding.instance.packageInfo` was added to get the packageName, making `registerToken` take longer to complete. Previously, in "token initially unknown" test in the UpdateMachine.registerNotificationToken `start()` and `_registerNotificationToken()` finished in sync with the test’s expectations. Now, a delay is added to ensure that the listener callback `_registerNotificationToken()` finishes its async work before continuing the test. Fixes #407
1 parent 16e4d88 commit 2930069

File tree

5 files changed

+30
-6
lines changed

5 files changed

+30
-6
lines changed

lib/model/binding.dart

+3
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,12 @@ class LinuxDeviceInfo implements BaseDeviceInfo {
303303
class PackageInfo {
304304
final String version;
305305
final String buildNumber;
306+
final String packageName;
306307

307308
const PackageInfo({
308309
required this.version,
309310
required this.buildNumber,
311+
required this.packageName
310312
});
311313
}
312314

@@ -411,6 +413,7 @@ class LiveZulipBinding extends ZulipBinding {
411413
_syncPackageInfo = PackageInfo(
412414
version: info.version,
413415
buildNumber: info.buildNumber,
416+
packageName: info.packageName
414417
);
415418
} catch (e, st) {
416419
assert(debugLog('Failed to prefetch package info: $e\n$st')); // TODO(log)

lib/notifications/receive.dart

+6-3
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,12 @@ class NotificationService {
149149
await addFcmToken(connection, token: token);
150150

151151
case TargetPlatform.iOS:
152-
const appBundleId = 'com.zulip.flutter'; // TODO(#407) find actual value live
153-
await addApnsToken(connection, token: token, appid: appBundleId);
154-
152+
final packageInfo = await ZulipBinding.instance.packageInfo;
153+
if (packageInfo == null) {
154+
assert(debugLog('missing packageInfo')); // TODO(log)
155+
}
156+
await addApnsToken(connection, token: token,
157+
appid: packageInfo?.packageName ?? 'com.zulip.flutter');
155158
case TargetPlatform.linux:
156159
case TargetPlatform.macOS:
157160
case TargetPlatform.windows:

test/api/core_test.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ void main() {
460460
});
461461
}
462462

463-
const packageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
463+
const packageInfo = PackageInfo(version: '0.0.1', buildNumber: '1', packageName: 'com.zulip.flutter');
464464

465465
const testCases = [
466466
('ZulipFlutter/0.0.1+1 (Android 14)', AndroidDeviceInfo(release: '14', sdkInt: 34), ),

test/model/binding.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,9 @@ class TestZulipBinding extends ZulipBinding {
230230
BaseDeviceInfo? get syncDeviceInfo => deviceInfoResult;
231231

232232
/// The value that `ZulipBinding.instance.packageInfo` should return.
233-
PackageInfo packageInfoResult = _defaultPackageInfo;
234-
static const _defaultPackageInfo = PackageInfo(version: '0.0.1', buildNumber: '1');
233+
PackageInfo? packageInfoResult = _defaultPackageInfo;
234+
static const _defaultPackageInfo = PackageInfo(version: '0.0.1',
235+
buildNumber: '1', packageName: 'com.zulip.flutter');
235236

236237
void _resetPackageInfo() {
237238
packageInfoResult = _defaultPackageInfo;

test/model/store_test.dart

+17
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,9 @@ void main() {
11771177
// When the token later appears, send it.
11781178
connection.prepare(json: {});
11791179
await startFuture;
1180+
// This delay is needed to allow the listener callback to `store._registerNotificationToken()`
1181+
// that occurs as a side effect of `startFuture` setting the token value to complete.
1182+
await Future<void>.delayed(Duration.zero);
11801183
if (defaultTargetPlatform == TargetPlatform.android) {
11811184
checkLastRequestFcm(token: '012abc');
11821185
} else {
@@ -1191,6 +1194,20 @@ void main() {
11911194
checkLastRequestFcm(token: '456def');
11921195
}
11931196
}));
1197+
1198+
testAndroidIos('use default appId if packageInfo is missing', () => awaitFakeAsync((async) async {
1199+
if (defaultTargetPlatform == TargetPlatform.iOS) {
1200+
addTearDown(testBinding.reset);
1201+
testBinding.firebaseMessagingInitialToken = '012abc';
1202+
testBinding.packageInfoResult = null;
1203+
addTearDown(NotificationService.debugReset);
1204+
await NotificationService.instance.start();
1205+
prepareStore();
1206+
connection.prepare(json: {});
1207+
await updateMachine.registerNotificationToken();
1208+
checkLastRequestApns(token: '012abc', appid: 'com.zulip.flutter');
1209+
}
1210+
}));
11941211
});
11951212
}
11961213

0 commit comments

Comments
 (0)