将 Google 登录与两个目标一起使用

     2023-02-23     207

关键词:

【中文标题】将 Google 登录与两个目标一起使用【英文标题】:Using Google Sign-in with two targets 【发布时间】:2015-10-19 11:03:14 【问题描述】:

我有一个我想不通的问题,我到处搜索。

我最近在我的应用中添加了 Google 登录,它在主要目标上运行良好,但是,由于我使用多个目标来部署我的应用的辅助版本,因此无法添加第二个捆绑标识符到“GoogleService-Info.plist”。 Google 登录代码按名称引用此文件,因此我不能像对其他 plist 所做的那样简单地更改应用程序的每个版本的名称。

我尝试向每个方案添加环境变量并在 plist 中使用 $BUNDLE_ID 以根据所选方案进行更改,但它也不起作用。有什么我想念的吗?具有多个目标的工作空间应该如何为每个目标使用具有不同变量的同一个 plist?

谢谢!

编辑:尝试使用 XCConfig 文件将 plist 中的静态值替换为编译时变量。不走运,可能是因为我认为 Google 登录正在直接访问该文件。我假设任何使用 Google 登录和具有多个目标(广告支持与付费溢价)的应用程序的人都必须有办法解决这个问题。请帮忙。

【问题讨论】:

您查看过 Xcode 中的自定义构建阶段吗?为每个目标创建一个阶段,将所需的 plist 复制到 GoogleService-Info.plist。 对此有什么想法吗?我正在尝试使用两个目标设置 Google 登录,其中一个可以正常工作,另一方面,会出现登录模式视图,但没有“取消”按钮。很奇怪。 还没有,没有。我可能会在 10 月份再次访问该问题,开始再次推动将我的次要版本发布到应用商店。您是否设法为您的不同版本获取了两个单独的捆绑包 ID? 使用 rascal2210 的建议让它工作。我将 GoogleService-Info plist 的主要副本从应用程序中移出到 2 个单独的文件夹中,然后在每个目标上使用构建阶段“复制文件”将目标特定 plist 导入资源文件夹(由下拉菜单选择) .谢谢! Sunkas,尝试我在 10 月 2 日提到的步骤。如果您仍然遇到问题,请告诉我,我会写一个更完整的指南。 【参考方案1】:

为每个目标创建一个单独的 plist 文件并在它们之间动态切换。 为此,您可以检查答案here

【讨论】:

【参考方案2】:

我遇到了同样的问题,我找到了一个非常简单的解决方案。

只需复制GoogleServices-Info.plist 并将其放在不同的文件夹中。该文件夹必须是物理上不同的文件夹,因为文件系统不会接受同一文件夹中的相同文件名。所以在finder中创建一个真正的文件夹并将其添加到XCode中,不要使用XCode组。

然后根据每个plist文件更改目标成员资格。而已!

【讨论】:

优雅! @tentmaking 也欠你一句“我爱你”! Hey Raphael,你是如何让它在文件夹中工作的?谷歌似乎想要它在根目录中,我的项目在第二个目标上崩溃了。任何建议都会非常感激! Google 只需要访问捆绑包中的文件。只要它在捆绑包中就可以了,无论它在哪个文件夹中。在您的目标/构建阶段/复制捆绑资源下,您可以看到哪些文件被复制到您的目标捆绑中。【参考方案3】:

我遇到了同样的问题。我有四个不同的目标,它们需要使用相同的 GoogleService-Info.plist 文件但具有不同的 bundleID。 我偶然发现了这个excellent article from Restless Thinker,它为这个确切的问题提供了解决方案。

PlistBuddy 是 Apple 提供的免费工具,内置在 OSX 中!

PlistBuddy 可以创建和修改 plist 文件。 Here's a great tutorial by Fotis。他让它看起来像小菜一碟。

首先检查 GoogleService-Info.plist 文件是否列在每个目标的 Build Phases>Copy Bundle resources 下。这应该已经到位,但重新检查不会受到伤害。如果文件不存在,请添加它。

接下来您需要为每个目标创建一个新的构建阶段。转到您的项目>目标>选择您的目标>构建阶段 检查 Build Phases 屏幕左上角的 + 按钮。

添加一个新的自定义阶段。 (您可能已经有运行脚本阶段,在这种情况下,只需在现有命令之后继续添加命令)

选择 New Run Script Phase 并在打开的新框中输入您的 PlistBuddy 命令

/usr/libexec/PlistBuddy -c "Set :BUNDLE_ID $PRODUCT_BUNDLE_IDENTIFIER" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist

确保您的 .app(在产品下)文件名与您的目标名称相同,否则这将不起作用。您可以 $TARGET_NAME.app 使其与您的 project.app 名称相同。

您可以通过这种方式更改更多值,只需在脚本中添加另一个新行。 您至少需要再添加两行才能更改 CLIENT_ID 和 REVERSE_CLIENT_ID。

/usr/libexec/PlistBuddy -c "Set :CLIENT_ID 123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm.apps.googleusercontent.com" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist
/usr/libexec/PlistBuddy -c "Set :REVERSED_CLIENT_ID com.googleusercontent.apps.123456789012-abcdefghijklmnopqrstuvwxyzabcdefghijklm" $BUILT_PRODUCTS_DIR/$TARGET_NAME.app/GoogleService-Info.plist

您可能需要进行清洁才能使其正常工作。在设备上构建和运行。 在设备上安装时,您可能需要选中“运行脚本”下的“仅在安装时运行脚本”的小框。当我未选中此框时,XCode 一直引用我的旧派生数据。

使用 PlistBuddy,您可以根据目标更改任何 plist 值。希望这会有所帮助。

【讨论】:

将 Google Web 组件与聚合物一起使用

】将GoogleWeb组件与聚合物一起使用【英文标题】:usinggooglewebcomponentswithpolymer【发布时间】:2015-05-1806:46:53【问题描述】:我正在使用来自以下页面的谷歌网络组件,但它似乎有很多错误。很多文件都找不到。注意:我使用的是... 查看详情

Google Play 的部署和上传密钥 - 如何将它们与 Cordova 一起使用

】GooglePlay的部署和上传密钥-如何将它们与Cordova一起使用【英文标题】:DeploymentanduploadkeyforGooglePlay-howtousethemwithCordova【发布时间】:2018-09-0719:24:18【问题描述】:我创建了一个Cordova混合应用程序,并以某种方式设法为GooglePlay... 查看详情

无法与 Internet Explorer 一起使用的 Web 应用程序的 Google 登录

】无法与InternetExplorer一起使用的Web应用程序的Google登录【英文标题】:GoogleSignInforWebAppsnotworkingwithInternetExplorer【发布时间】:2015-10-0806:14:08【问题描述】:使用Google提供的quickstartsample,我已经能够让Web应用程序登录以在Chrome和... 查看详情

将 Google App Engine 与移动应用程序和网络应用程序一起使用

】将GoogleAppEngine与移动应用程序和网络应用程序一起使用【英文标题】:UsingGoogleAppEnginewithmobileappsandawebapp【发布时间】:2014-03-2316:50:27【问题描述】:我刚刚开始考虑在我正在开发的项目中使用GoogleAppEngine。该项目将有一个Andr... 查看详情

如何让网站的 Google 登录与 Identity Aware Proxy 一起使用

】如何让网站的Google登录与IdentityAwareProxy一起使用【英文标题】:HowtogetGoogleSign-InforWebsitestoworkwithIdentityAwareProxy【发布时间】:2018-04-0814:14:07【问题描述】:我在谷歌云中有一个网站。我使用Identity-AwareProxy(IAP)来保护它。当请求... 查看详情

是否可以将 Google App Engine 与 Google Cloud *** 一起使用?

】是否可以将GoogleAppEngine与GoogleCloud***一起使用?【英文标题】:IsitpossibletouseGoogleAppEnginewithGoogleCloud***?【发布时间】:2016-09-0509:29:29【问题描述】:Google的文档对此并不十分清楚。在这里(https://cloud.google.com/compute/docs/***/overvie... 查看详情

将标头与 Google 社区连接器一起使用

】将标头与Google社区连接器一起使用【英文标题】:UsingHeaderswithGoogleCommunityConnector【发布时间】:2020-07-2919:23:07【问题描述】:在编写Google社区连接器时如何使用授权标头?例如。在getData()中调用URL时会不会像这样简单:varrespo... 查看详情

将 Google 身份验证令牌与 Firebase 一起使用

】将Google身份验证令牌与Firebase一起使用【英文标题】:UseGoogleauthenticationtokenwithFirebase【发布时间】:2016-03-0117:21:51【问题描述】:我有一个.NET应用程序(不是网络应用程序),其中用户已通过Google授权进行身份验证,因此已... 查看详情

尝试将 tensorboard 与 google colab 一起使用时出错

】尝试将tensorboard与googlecolab一起使用时出错【英文标题】:Errorontryingtousetensorboardwithgooglecolab【发布时间】:2019-08-2417:52:15【问题描述】:我在尝试将tensorboard与googlecollab一起使用时遇到错误。我正在使用ngork运行张量板。错误... 查看详情

我可以将 TensorBoard 与 Google Colab 一起使用吗?

】我可以将TensorBoard与GoogleColab一起使用吗?【英文标题】:CanIuseTensorBoardwithGoogleColab?【发布时间】:2018-05-2820:46:40【问题描述】:在GoogleColab上训练TensorFlow模型时,有什么方法可以使用TensorBoard?【问题讨论】:官方文档:colab... 查看详情

将 AppIdentityCredential 与 Google Drive API 一起使用

】将AppIdentityCredential与GoogleDriveAPI一起使用【英文标题】:UsingAppIdentityCredentialwithGoogleDriveAPI【发布时间】:2012-10-1015:47:00【问题描述】:我正在使用GoogleAppEngineIdentity访问GoogleApps用户的GoogleDriveAPI。我在GoogleApps的管理API客户端... 查看详情

将 Google Directory API 与 SSH 隧道一起使用

】将GoogleDirectoryAPI与SSH隧道一起使用【英文标题】:UsingGoogleDirecoryAPIwithSSHTunnel【发布时间】:2016-10-1101:18:30【问题描述】:错误:com.google.api.client.auth.oauth2.TokenResponseException:400错误请求“错误”:“无效范围”,"error_description"... 查看详情

将 Thymeleaf 与 Google 图表和 Java 地图一起使用

】将Thymeleaf与Google图表和Java地图一起使用【英文标题】:UsingThymeleafwithGooglechartsandJavaMap【发布时间】:2018-08-3101:31:17【问题描述】:我在JavaScript中制作的Thymeleaf块切断了结尾;变量,并抛出一个Uncaught(inpromise)SyntaxError:Unexpectedt... 查看详情

如何将 GoogleApiClient 位置服务与 Google Api 一起使用?

】如何将GoogleApiClient位置服务与GoogleApi一起使用?【英文标题】:HowcanIuseGoogleApiClientlocationserviceswithGoogleApi?【发布时间】:2021-08-2200:42:46【问题描述】:在一个教程中,我正在观看讲师将GoogleApiClient用于LocationServices,就像这样... 查看详情

将 Google Translation API 与 localhost 一起使用

】将GoogleTranslationAPI与localhost一起使用【英文标题】:UseGoogleTranslationAPIwithlocalhost【发布时间】:2014-03-0403:05:21【问题描述】:当您在localhost上开发应用程序时,是否有机会在不获取密钥的情况下使用UseGoogleTranslationAPI?我希望... 查看详情

将 Electron 与 Google Analytics 嵌入 API 一起使用

】将Electron与GoogleAnalytics嵌入API一起使用【英文标题】:UsingElectronwithGoogleAnalyticsEmbedAPI【发布时间】:2016-11-2502:52:21【问题描述】:我正在尝试使用Electron和GoogleAnalytics数据构建桌面应用程序。我正在使用GoogleAnalytics嵌入API。我... 查看详情

如何将 OAuth 与 Google AdWords / AdSense API 一起使用?

】如何将OAuth与GoogleAdWords/AdSenseAPI一起使用?【英文标题】:HowtouseOAuthwithGoogleAdWords/AdSenseAPI?【发布时间】:2011-08-1507:43:04【问题描述】:全部我可以成功地使用OAuth与GA服务一起工作,已经为此编写了很多代码。出于安全考虑,... 查看详情

将 google firebase 分析与 iOS 操作扩展一起使用

】将googlefirebase分析与iOS操作扩展一起使用【英文标题】:UsegooglefirebaseanalyticswithiOSactionextension【发布时间】:2016-07-1315:59:28【问题描述】:我想收集一些用户的信息,这些用户正在使用我的iOS应用的操作扩展和谷歌Firebase分析... 查看详情