Skip to content

Commit

Permalink
Merge branch 'master' into @russell/web-compat-v9
Browse files Browse the repository at this point in the history
  • Loading branch information
Salakar committed Apr 21, 2022
2 parents 964e4d8 + d3dda12 commit e54ef98
Show file tree
Hide file tree
Showing 15 changed files with 430 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Pod::Spec.new do |s|
s.public_header_files = 'Classes/Public/*.h'
s.private_header_files = 'Classes/Private/*.h'

s.ios.deployment_target = '9.0'
s.ios.deployment_target = '10.0'
s.dependency 'Flutter'

s.dependency 'firebase_core'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
import io.flutter.plugins.firebase.core.FlutterFirebasePlugin;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
Expand Down Expand Up @@ -344,7 +345,10 @@ private static List<Map<String, Object>> parseUserInfoList(
List<? extends UserInfo> userInfoList) {
List<Map<String, Object>> output = new ArrayList<>();

for (UserInfo userInfo : userInfoList) {
Iterator<? extends UserInfo> iterator = userInfoList.iterator();

while (iterator.hasNext()) {
UserInfo userInfo = iterator.next();
if (!FirebaseAuthProvider.PROVIDER_ID.equals(userInfo.getProviderId())) {
output.add(parseUserInfo(userInfo));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,23 @@
if (dynamicLink.minimumAppVersion) {
iosData[@"minimumVersion"] = dynamicLink.minimumAppVersion;
}

if (dynamicLink.matchType == FIRDLMatchTypeNone) {
iosData[@"matchType"] = [NSNumber numberWithInt:0];
}

if (dynamicLink.matchType == FIRDLMatchTypeWeak) {
iosData[@"matchType"] = [NSNumber numberWithInt:1];
}

if (dynamicLink.matchType == FIRDLMatchTypeDefault) {
iosData[@"matchType"] = [NSNumber numberWithInt:2];
}

if (dynamicLink.matchType == FIRDLMatchTypeUnique) {
iosData[@"matchType"] = [NSNumber numberWithInt:3];
}

dictionary[@"utmParameters"] = dynamicLink.utmParametersDictionary;
dictionary[@"ios"] = iosData;
return dictionary;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export 'package:firebase_dynamic_links_platform_interface/firebase_dynamic_links
PendingDynamicLinkData,
PendingDynamicLinkDataAndroid,
PendingDynamicLinkDataIOS,
MatchType,
ShortDynamicLink,
ShortDynamicLinkType,
SocialMetaTagParameters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ void main() {
const mockClickTimestamp = 1234567;
const mockMinimumVersionAndroid = 12;
const mockMinimumVersionIOS = 'ios minimum version';
const mockMatchTypeIOS = MatchType.high;
Uri mockUri = Uri.parse('mock-scheme');

when(dynamicLinks.getInitialLink()).thenAnswer(
Expand All @@ -96,6 +97,7 @@ void main() {
mockClickTimestamp,
mockMinimumVersionAndroid,
mockMinimumVersionIOS,
mockMatchTypeIOS,
),
);

Expand Down Expand Up @@ -130,13 +132,15 @@ void main() {
const mockClickTimestamp = 38947390875;
const mockMinimumVersionAndroid = 21;
const mockMinimumVersionIOS = 'min version';
const mockMatchTypeIOS = MatchType.weak;

when(dynamicLinks.getDynamicLink(mockUri)).thenAnswer(
(_) async => TestPendingDynamicLinkData(
mockUri,
mockClickTimestamp,
mockMinimumVersionAndroid,
mockMinimumVersionIOS,
mockMatchTypeIOS,
),
);

Expand All @@ -160,13 +164,15 @@ void main() {
const mockClickTimestamp = 239058435;
const mockMinimumVersionAndroid = 33;
const mockMinimumVersionIOS = 'on-link version';
const mockMatchTypeIOS = MatchType.unique;
when(dynamicLinks.onLink).thenAnswer(
(_) => Stream.value(
TestPendingDynamicLinkData(
mockUri,
mockClickTimestamp,
mockMinimumVersionAndroid,
mockMinimumVersionIOS,
mockMatchTypeIOS,
),
),
);
Expand Down Expand Up @@ -288,6 +294,7 @@ class TestPendingDynamicLinkData extends PendingDynamicLinkData {
mockClickTimestamp,
mockMinimumVersionAndroid,
mockMinimumVersionIOS,
mockMatchTypeIOS,
) : super(
link: mockUri,
android: PendingDynamicLinkDataAndroid(
Expand All @@ -296,11 +303,13 @@ class TestPendingDynamicLinkData extends PendingDynamicLinkData {
),
ios: PendingDynamicLinkDataIOS(
minimumVersion: mockMinimumVersionIOS,
matchType: mockMatchTypeIOS,
),
);
}

final testData = TestPendingDynamicLinkData(Uri.parse('uri'), null, null, null);
final testData =
TestPendingDynamicLinkData(Uri.parse('uri'), null, null, null, null);

Future<PendingDynamicLinkData?> testFutureData() {
return Future.value(testData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ export 'src/navigation_info_parameters.dart';
export 'src/social_meta_tag_parameters.dart';
export 'src/android_parameters.dart';
export 'src/dynamic_link_parameters.dart';
export 'src/match_type.dart';
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// The match type of the Dynamic Link.
/// https://firebase.google.com/docs/reference/ios/firebasedynamiclinks/api/reference/Enums/FIRDLMatchType.html
enum MatchType {
/// The match has not been achieved.
none,

/// The match between the Dynamic Link and this device may not be perfect, hence you should
/// not reveal any personal information related to the Dynamic Link.
weak,

/// The match between the Dynamic Link and this device has high confidence but small possibility
/// of error still exist.
high,

/// The match between the Dynamic Link and this device is exact, hence you may reveal personal
/// information related to the Dynamic Link.
unique,
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'dart:async';

import 'package:firebase_dynamic_links_platform_interface/firebase_dynamic_links_platform_interface.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_dynamic_links_platform_interface/src/method_channel/utils/convert_match_type.dart';
import 'package:flutter/services.dart';

import 'utils/exception.dart';
Expand Down Expand Up @@ -96,8 +97,12 @@ class MethodChannelFirebaseDynamicLinks extends FirebaseDynamicLinksPlatform {
PendingDynamicLinkDataIOS? iosData;
if (linkData['ios'] != null) {
final Map<dynamic, dynamic> data = linkData['ios'];
iosData =
PendingDynamicLinkDataIOS(minimumVersion: data['minimumVersion']);

MatchType? matchType = convertMatchType(data['matchType']);
iosData = PendingDynamicLinkDataIOS(
minimumVersion: data['minimumVersion'],
matchType: matchType,
);
}

return PendingDynamicLinkData(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import '../../match_type.dart';

MatchType? convertMatchType(int? matchType) {
switch (matchType) {
case 0:
return MatchType.none;
case 1:
return MatchType.weak;
case 2:
return MatchType.high;
case 3:
return MatchType.unique;
default:
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,25 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'match_type.dart';

/// Provides iOS specific data from received dynamic link.
class PendingDynamicLinkDataIOS {
const PendingDynamicLinkDataIOS({this.minimumVersion});
const PendingDynamicLinkDataIOS({this.minimumVersion, this.matchType});

/// The minimum version of your app that can open the link.
///
/// It is app developer's responsibility to open AppStore when received link
/// declares higher [minimumVersion] than currently installed.
final String? minimumVersion;

/// The match type of the received Dynamic Link.
final MatchType? matchType;

/// Returns the current instance as a [Map].
Map<String, dynamic> asMap() => <String, dynamic>{
'minimumVersion': minimumVersion,
'matchType': matchType?.index,
};

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ import 'package:flutter_test/flutter_test.dart';
void main() {
Uri link = Uri.parse('pending-link');
int minimumVersion = 12;
MatchType matchType = MatchType.high;
String minimumVersionIos = 'minimum version';
int clickTimestamp = 12345345;
PendingDynamicLinkDataAndroid androidData = PendingDynamicLinkDataAndroid(
minimumVersion: minimumVersion,
clickTimestamp: clickTimestamp,
);
PendingDynamicLinkDataIOS iosData =
PendingDynamicLinkDataIOS(minimumVersion: minimumVersionIos);
PendingDynamicLinkDataIOS iosData = PendingDynamicLinkDataIOS(
minimumVersion: minimumVersionIos,
matchType: matchType,
);

group('$PendingDynamicLinkData', () {
PendingDynamicLinkData pendingDynamicLinkData =
Expand Down Expand Up @@ -56,6 +59,10 @@ void main() {
result['ios']['minimumVersion'],
pendingDynamicLinkData.ios?.minimumVersion,
);
expect(
result['ios']['matchType'],
pendingDynamicLinkData.ios?.matchType?.index,
);
expect(result['link'], pendingDynamicLinkData.link.toString());
});
});
Expand Down
3 changes: 3 additions & 0 deletions tests/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ if (flutterVersionName == null) {
}

apply plugin: 'com.android.application'
// START: FlutterFire Configuration
apply plugin: 'com.google.gms.google-services'
// END: FlutterFire Configuration
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

Expand Down
Loading

0 comments on commit e54ef98

Please sign in to comment.