我们将免费的UWP应用程序发布到Microsoft Store,并附带非耗材升级附加组件.由于最近向公众引入了新的订阅计费模式,我们计划通过在下一版本中添加订阅计划来利用它.
我们还希望在后端查看和管理用户自己的附加组件,并且有相关文档可以做到这一点.我们密切关注它,但最终 - 在尝试获取用户订阅时 - 我们总是得到一个空的响应:{ "items": [] }.
以下是我们一步一步简要介绍的内容:
为以下受众URI创建了三个Azure Active Directory(AAD)令牌:
代表我们的测试Microsoft帐户通过调用StoreContext.GetCustomerCollectionsIdAsync和StoreContext.GetCustomerPurchaseIdAsync分别从我们的应用程序中的客户端代码创建收集和购买API的Microsoft Store ID密钥.为了生成每个密钥,我们在步骤3中使用了相应的AAD令牌.
所以我们得到了200 "OK"回复,但是这个列表总是空的,这非常令人失望,实际上是我们现在的主要阻塞问题.
我们还可以通过"订单历史记录"确认我们上述测试Microsoft帐户至少拥有一个持久插件和一个订阅.可以通过在客户端应用程序中调用StoreContext.GetUserCollectionAsync或StoreContext.GetAppLicenseAsyncAPI 来检查相同的结果- 确实存在一个非消耗品和一个订阅.
我在官方论坛上发布了同样的问题,但不确定我们是否会尽快得到答复,所以决定在此发布.请注意,类似的问题也会在论坛上发布,但是从线程中不清楚它是否已经解决.
有没有人设法让用户从他们的后端服务购买?我们将非常感谢任何可以使它为我们工作的指导.
更新(2018.08.29):
所以我们在这个问题上取得了一些进展.我们创建了新的非免费(0.99美元)订阅附加组件,购买它并请求用户订阅.令人惊讶的是,响应中出现了一个新项目!
值得一提的是,同一个用户已经拥有了几个免费的订阅,但没有一个在响应列表中.我从未在文档中看到有关免费订阅的任何限制,并说它们不会包含在退回的项目中.
无论如何,部分解决了订阅的问题,现在我们无法获得有关"查询产品"API的任何非消耗性耐用附件的信息,无论其价格等级 - 这也是一个主要问题,因此进一步调查是需要.
更新:该问题与AVPlayerControllerView无关,请参阅下面的答案.班级的名字AVTouchIgnoringView在一开始就让我困惑,但这也是思考问题的错误途径.
===
众所周知,Media Player在iOS 9中不推荐使用框架,因此我决定尝试AVKit在我的新项目中使用.我的任务是显示嵌入在集合视图'header(UICollectionReusableView)中的视频播放器,下面有一些任意单元格.
这是我在代码中这样做的方式:
override func viewDidLoad() {
super.viewDidLoad()
apiManager.loadVideo() { video in
let player = AVPlayer(URL: video.url)
self.playerViewController.view.hidden = true
self.playerViewController.player = player
self.addChildViewController(self.playerViewController)
headerView.videoContainerView.addSubview(self.playerViewController.view)
Cartography.layout(self.playerViewController.view,
headerView.videoContainerView) { (v1, v2) in
v1.leading == v2.leading
v1.bottom == v2.bottom
v1.trailing == v2.trailing
v1.top == v2.top
}
self.playerViewController.didMoveToParentViewController(self)
self.playerViewController.addObserver(self,
forKeyPath: KeyPath.ReadyForDisplay, options: nil, context: nil)
}
}
override func observeValueForKeyPath(keyPath: String,
ofObject object: AnyObject, change: [NSObject : AnyObject],
context: UnsafeMutablePointer<Void>) {
if …Run Code Online (Sandbox Code Playgroud) 假设您有这样的函数:
func getSomething(error: NSErrorPointer) -> Something
Run Code Online (Sandbox Code Playgroud)
你通常这样使用它:
var error : NSError? = nil
let a = getSomething(&error)
Run Code Online (Sandbox Code Playgroud)
在这里检查错误的惯用方法是什么?更具体的问题:
error == nil我们可以假设a永远不会为零,反之亦然?error为了它的无效)或a(确认它不是零)?a != nil && error != nil在某些情况下可以是真的吗?谢谢!