如何在Flutter中获取Bundle ID

60

我使用以下方法获取应用程序名称和包名称,但我需要iPhone用户的Bundle ID。 我想分享一个应用链接。 我在安卓上做到了,但是在iPhone上,我需要Bundle ID。

 Future<Null> _initPackageInfo() async {
        final PackageInfo info = await PackageInfo.fromPlatform();
        setState(() {
          _packageInfo = info;
          packageName = info.packageName;
          appName = info.appName;
          buildNumber = info.buildNumber;
        });
      }

3
info.packageName 应该在 iOS 上可用,对吗? - Bostrot
6个回答

132
要手动查找项目名称,您可以查看AndroidManifest.xml或Info.plist。

Android

在Android中,包名在AndroidManifest中:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    package="com.example.appname">

iOS

iOS中的包名是Info.plist中的bundle identifier:

<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>

这段文字可以在Runner.xcodeproj/project.pbxproj中找到:

PRODUCT_BUNDLE_IDENTIFIER = com.example.appname;

参见


请更明确一些,https://apps.apple.com/app/id$appId 我仍然只得到包名,而不是id12312312312的bundle id。 - Yogi Arif Widodo
这个问题是寻找Bundle ID而不是包名,但我已经通过查找或从iTunes API获取解决了。 - Yogi Arif Widodo
https://stackoverflow.com/help/how-to-answer - Yogi Arif Widodo
1
@YogiArifWidodo,我之前不知道除了PRODUCT_BUNDLE_IDENTIFIER之外还有一个单独的bundle id。你为其他来这里的人添加了一个新答案,这很好。 - Suragch

14
在 Flutter 项目的 iOS 部分,产品捆绑标识符位于路径 [your-flutter-project-dir]\ios\Runner.xcodeproj\project.pbxproj 的文件中,并且指定如下:
PRODUCT_BUNDLE_IDENTIFIER = com.app.flutter.example;

请注意,这个值在Flutter项目中与Android包名相同。


4

如果你仅需要手动获取iOS包标识符,这里是如何操作的

  1. 在Android Studio中选择根文件夹(例如 flutte_name
  2. 在任务栏中选择 Tools>>Flutter>>Open IOS Modules in Xcode
  3. 在Xcode中打开Runner,在 Identity/Bundle Identifier 下可以找到标识符。

enter image description here


如果我在Windows 11上使用Android Studio,如何获取iOS Bundle ID? - pawan
1
据我所知,Xcode需要Mac/macOS。如果你有Windows系统,我建议你参考这个答案。 - Paul

1
您可能想将其更新为自定义名称,而不是com.example.appName,因此您可以查看pub.dev上名为change_app_name的软件包,链接在此处https://pub.dev/packages/change_app_package_name 非常简单,我自己就做到了。将软件包添加到您的pubspec文件中,然后在根目录中的终端中键入“flutter pub run change_app_package_name:main com.company.app”,将最后一部分更改为您想要的任何内容,它将使用您选择的新名称更新整个项目。

我认为这个答案应该放在这里:https://dev59.com/3FUK5IYBdhLWcg3wmxGw。 - Jeff

1

我看到你已经通过info.packageName;获得了包名和应用程序名称info.appName;

  1. 尝试请求 http://itunes.apple.com/search?media=software&country={countryID}&term={appName}
  2. 你可以使用curl进行测试,而不是使用浏览器(这将返回 file.txt 文件)
curl --location -g --request GET 'http://itunes.apple.com/search?media=software&country=id&term=appName' \
--header 'Accept: application/json' | jq

在其他解决方案中,有些人可以从中获得它。
// if doesnt work try with these lookup
itunes.apple.com/lookup?bundleId=com.apple.Pages

 | jq // these for make response beutifull

响应json

....
....
bundleId: '212312xxxxxx'
trackViewUrl: 'https://apps.apple.com/id/app/appName/id212312xxxxxx'
....
....

我使用这些概念来从后端进行自我更新(启动屏幕/检查应用程序版本),将弹出警报,强制用户前往市场。

0

使用 get_version 包。这是最简单的方法。

安装:

 dependencies:
   get_version: any

使用方法:

String projectAppID;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
  projectAppID = await GetVersion.appID;
} on PlatformException {
  projectAppID = 'Failed to get app ID.';
}

你可以将它作为字符串在任何你想要的地方使用,比如文本小部件等等...

在一个小应用程序中获取版本的另一个示例:

import 'package:get_version/get_version.dart';    
  class _MyAppState extends State<MyApp> {
  String _projectAppID = '';
  @override
  initState() {
    super.initState();
    initPlatformState();
  }    
  // Platform messages are asynchronous, so we initialize in an async method.
  initPlatformState() async {
    String projectAppID;
    try {
      projectAppID = await GetVersion.appID;
    } catch (e) {
      projectAppID = 'Failed to get app ID.';
    }
    setState(() {
      _projectAppID = projectAppID;
    });
  }
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: ListTile(
          leading: new Icon(Icons.info),
          title: const Text('App ID'),
          subtitle: new Text(_projectAppID),
        ),
      ),
    );
  }
}

输出:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接