在一个目标 (GCM) 中有两个 GoogleService-Info.plist(或更多)

Posted

技术标签:

【中文标题】在一个目标 (GCM) 中有两个 GoogleService-Info.plist(或更多)【英文标题】:Have two GoogleService-Info.plist (or more) in one target (GCM) 【发布时间】:2016-07-24 06:24:19 【问题描述】:

我正在将 GCM 集成到一个应用程序中,我们碰巧有多个针对同一目标的构建配置,其中一些使用不同的 Bundle Id(我们有不同的帐户、企业和应用商店),所以如果我们想启用 GCM 推送通知我们都需要两个不同的 GoogleService-Info.plist 文件(每个文件对应不同的 BundleID)。我找不到一种方法来告诉 GCM sdk 从一个不同的命名文件初始化,但默认文件。有谁知道这是否可能?

我可以想到两种解决方案,但我宁愿不这样做。 - 一旦应用程序启动(或之前),将捆绑 ID 写入 plist 文件 - 使用不同的 plist 文件创建不同的 Target

非常感谢。

问候, 哈维尔

【问题讨论】:

您是对的,您需要为 Enterprise 和 Appstore 帐户提供两个不同的 GoogleService-Info.plist 文件。但我认为不可能在一个目标中有两个或多个 GoogleService-Info.plist。正如您所说,最好“使用不同的plist文件创建一个不同的目标”。因此,如果目标是企业,则使用一个 .plist 文件,如果另一个目标是发布版本,则使用另一个 plist 文件。检查这个相关的question。 谢谢,我决定最后我将在运行脚本构建阶段编辑 GoogleService-Info.plist 文件,为包标识符设置正确的值。 构建阶段的运行脚本是否有效?我认为这是唯一的选择,但似乎无法让我的脚本正常工作。你能分享你的答案吗? 【参考方案1】:

我也有类似的问题:Use User-Defined build settings in custom .plist file

您可以使用Build Phase Script 将正确的 .plist 文件复制到您的位置:

    创建一个新文件夹(例如:GoogleServiceInfoPlists)。 复制所有 .plist 文件(例如:GoogleService-Info-Debug.plistGoogleService-Info-Stage.plistGoogleService-Info- Prod.plist)。 添加新的Run Script Phase(Xcode:Target->Build Phases->“+”按钮

    使用下面的脚本将给定环境的 .plist 文件复制(替换)到主目录(在我的例子中是 src):

    cp "$SRCROOT/src/Resources/GoogleServiceInfoPlists/GoogleService-Info-$CONFIGURATION.plist" "$SRCROOT/src/GoogleService-Info.plist"
    

请注意,src/GoogleService-Info.plist 文件必须添加到 Xcode 项目(构建阶段->复制捆绑资源),而 /src/Resources/GoogleServiceInfoPlists/GoogleService-Info-* 文件不一定。

【讨论】:

以上是关于在一个目标 (GCM) 中有两个 GoogleService-Info.plist(或更多)的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 agsXMPP 连接到 GCM(无法建立连接,因为目标机器主动拒绝它)

在 XCode 的一个目标中有两个 GoogleService-Info.plist

在具有两个 GCM 广播接收器的应用中偶尔出现 GCM 错误:INVALID_SENDER

android中两个应用程序的相同GCM注册ID?

通过 GCM(Google Cloud Messaging)在两个不同的应用程序之间进行通信

IOS 没有收到 GCM 推送通知