问题
I've looked around and it seems like several people are having this issue but no-one seems to have solved it:
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
Some people suggest using this Node to Objective-C bridge to do it:
https://github.com/TooTallNate/NodObjC
Other people suggest using this in-app library, but from what I can see, it only validates receipts:
https://github.com/voltrue2/in-app-purchase
Has anyone actually managed to implement in-app purchases in an Electron app for the Mac App Store?
How did you do it?
If no one has done it, is it simply impossible to do?
回答1:
Update
Finally, I added in-app purchase directly to Electron.
See https://electronjs.org/docs/tutorial/in-app-purchases
First solution
I have implemented this solution and it works in development (not yet tested in production).
- Create a MacOS application (InAppPurchase) with Xcode that performs the in-app purchase (see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html)
- Put the InAppPurchase.app somewhere in your Electron app folder
- Use
require('electron').shell.openItem
orrequire('child_process').spawn('./InAppPurchase.app/Contents/MacOS/InAppPurchase');
in your Electron app to start the in-app purchase.
This is definitely not a clean solution but it seems to work...
Second solution
I think that it can also be done with NodObjC. However, this lib is very heavy compared to the first solution.
Third solution
Adding in-app purchase directly to Electron.
I will keep you informed if I can release my Electron app on the Mac Apple Store with IAP or if I found another solution.
回答2:
In addition to user108828 i can suggest a couple more ideas to solve your problem:
You can implement MAS receipt validation as a dynamic library in obj-C/C++/C using Xcode and then include it in your project via ToTallNate's node-ffi. For implementation you can use any of a large number of solutions that you can easely find on web.
Another way to perform receipt verification is to create a self made node addon that includes openssl and objective-c runtime libraries. For this solution you may also need to include CoreFoundation and/or some other apple frameworks. As a result you will be able to implement your validation in pure C/C++ and incapsulate it in your node module.
The API design of your dylib/node addon is strictly up to you and should be kept in secret.
Good luck!
来源:https://stackoverflow.com/questions/46753835/implementing-in-app-purchase-in-an-electron-app-for-the-mac-app-store