Firebase Dynamic Links在iOS端崩溃,Android端正常运行求助
问题:Firebase动态链接iOS构建失败,Android运行正常
代码在Android设备上可正常生成短动态链接,但iOS设备执行时抛出类型转换错误:type 'int' is not a subtype of type 'String' in type cast。
原代码
String userId = uid; final DynamicLinkParameters dynamicLinkParameters = DynamicLinkParameters( uriPrefix: 'https://mywebsite.com/user/', link: Uri.parse( 'https://mywebsite.com/link/?username=$userId', ), ); final ShortDynamicLink shortDynamicLink = await dynamicLink.buildShortLink( dynamicLinkParameters, shortLinkType: ShortDynamicLinkType.short, );
报错日志
flutter: type 'int' is not a subtype of type 'String' in type cast 2022-07-29 22:30:23.235625+0300 Runner[51971:280704] flutter: #0 new LinkedHashMap.from.<anonymous closure> (dart:collection/linked_hash_map.dart:187:26) #1 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:614:13) #2 new LinkedHashMap.from (dart:collection/linked_hash_map.dart:186:11) #3 platformExceptionToFirebaseException (package:firebase_dynamic_links_platform_interface/src/method_channel/utils/exception.dart:32:9) #4 convertPlatformException (package:firebase_dynamic_links_platform_interface/src/method_channel/utils/exception.dart:17:5) #5 MethodChannelFirebaseDynamicLinks.buildShortLink (package:firebase_dynamic_links_platform_interface/src/method_channel/method_channel_firebase_dynamic_links.dart:196:7)
解决方案
问题根源是uid实际为int类型,Android端会自动隐式转为字符串,但iOS端的Method Channel在传递参数时会严格保留类型,导致URL拼接后参数类型不匹配引发错误。
修改方式:强制将uid转为字符串类型,确保URL参数为纯字符串:
// 方式1:先将uid转为字符串再赋值 String userId = uid.toString(); final DynamicLinkParameters dynamicLinkParameters = DynamicLinkParameters( uriPrefix: 'https://mywebsite.com/user/', link: Uri.parse( 'https://mywebsite.com/link/?username=$userId', ), ); final ShortDynamicLink shortDynamicLink = await dynamicLink.buildShortLink( dynamicLinkParameters, shortLinkType: ShortDynamicLinkType.short, );
或者直接在URL拼接时转换:
final DynamicLinkParameters dynamicLinkParameters = DynamicLinkParameters( uriPrefix: 'https://mywebsite.com/user/', link: Uri.parse( 'https://mywebsite.com/link/?username=${uid.toString()}', ), ); final ShortDynamicLink shortDynamicLink = await dynamicLink.buildShortLink( dynamicLinkParameters, shortLinkType: ShortDynamicLinkType.short, );
内容的提问来源于stack exchange,提问作者Emma Alden
相关产品推荐
相关产品推荐

