在 Mac App Store 的 Electron 应用中实现应用内购买

Posted

技术标签:

【中文标题】在 Mac App Store 的 Electron 应用中实现应用内购买【英文标题】:Implementing in-app purchase in an Electron app for the Mac App Store 【发布时间】:2017-10-15 10:04:40 【问题描述】:

我环顾四周,似乎有几个人遇到了这个问题,但似乎没有人解决它:

Adding Apple in-app purchase to Electron html/JS app

https://github.com/electron/electron/issues/3745

https://discuss.atom.io/t/osx-in-app-purchases-in-electron/22885

有人建议使用这个 Node 到 Objective-C 的桥来做:

https://github.com/TooTallNate/NodObjC

其他人建议使用这个应用内库,但据我所知,它只验证收据:

https://github.com/voltrue2/in-app-purchase

有没有人真正设法?

你是怎么做到的?

如果没有人做过,那是不可能的吗?

【问题讨论】:

【参考方案1】:

更新

最后,我将应用内购买直接添加到 Electron。

见https://electronjs.org/docs/tutorial/in-app-purchases


第一个解决方案

我已经实施了这个解决方案,它在开发中有效(尚未在生产中测试)。

    使用 Xcode 创建一个 MacOS 应用程序 (InAppPurchase) 以执行应用内购买(请参阅https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html) 将 InAppPurchase.app 放在 Electron 应用文件夹中的某个位置 在您的 Electron 应用中使用 require('electron').shell.openItemrequire('child_process').spawn('./InAppPurchase.app/Contents/MacOS/InAppPurchase'); 开始应用内购买。

这绝对不是一个干净的解决方案,但它似乎工作......

第二种解决方案

我认为它也可以用 NodObjC 来完成。但是,与第一个解决方案相比,此库非常重。

第三种解决方案

将应用内购买直接添加到 Electron。


如果我可以通过 IAP 在 Mac Apple Store 上发布我的 Electron 应用程序,或者我找到了其他解决方案,我会通知你。

【讨论】:

这看起来是一个很好的开始。我看过一点 NodObjC,但发现它真的很混乱。一般来说,我发现 Objective C 和 JS 的混合非常令人困惑。你能分享你的Xcode“应用程序”吗?我不完全理解 'require('electron').shell.openItem' 的作用。你能进一步解释一下它的作用吗? 顺便说一句...如果您能给我一个我可以实施的可行解决方案,我将在 300 赏金积分之上额外投入 50 美元作为额外的感谢。我认为这个问题没有已知的解决方案,真的很想找到一个。 好的,谢谢,我会尝试将它直接添加到 Electron。我认为这是最好的解决方案。 听起来不错。让我知道事情的后续。如果您有一些示例代码,请不要犹豫发布它。然后我可能会看看我是否也可以用它做点什么。 你有什么发现吗?您能否创建一个可以共享(或仅共享主代码)的示例 Xcode 应用程序,以说明 Xcode 应用程序将如何?如果可以,那么我也许能够理解该解决方案的工作原理并以此为基础构建东西。【参考方案2】:

除了user108828,我还可以提出更多想法来解决您的问题:

    您可以使用 Xcode 在 obj-C/C++/C 中将 MAS 收据验证实现为动态库,然后通过 ToTallNate's node-ffi 将其包含在您的项目中。对于实施,您可以使用可以在网络上轻松找到的大量解决方案中的任何一种。

    另一种执行收据验证的方法是创建一个自制的node addon,其中包括openssl 和objective-c runtime 库。对于此解决方案,您可能还需要包含 CoreFoundation 和/或其他一些苹果框架。因此,您将能够在纯 C/C++ 中实现验证并将其封装在您的节点模块中。

dylib/node 插件的 API 设计完全由您决定,应该保密。

祝你好运!

【讨论】:

以上是关于在 Mac App Store 的 Electron 应用中实现应用内购买的主要内容,如果未能解决你的问题,请参考以下文章

App for Mac App Store 签名后不运行

在没有 Mac 的情况下向 Apple App Store 提交 Ionic App [重复]

mac app store出错 怎么回事

Mac App Store - 链接到 App Review 页面

在 Mac App Store 和外部分发

Mac 应用程序 |代码签名 |不通过 Mac App Store 分发 [关闭]