为当前用户调用Parse Cloud Function
我试图在parsing中运行一些云function,以及我在Stackoverflow上find的问题( parsingiOS SDK:从Xcode调用云function )。 这里是我想要在我的应用程序中调用的函数:
var moment = require("moment"); Parse.Cloud.define("registerActivity", function(request, response) { var user = request.user; user.set("lastActive", new Date()); user.save().then(function (user) { response.success(); }, function (error) { console.log(error); response.error(error); }); }); Parse.Cloud.define("getOnlineUsers", function(request, response) { var userQuery = new Parse.Query(Parse.User); var activeSince = moment().subtract("minutes", 2).toDate(); userQuery.greaterThan("lastActive", activeSince); userQuery.find().then(function (users) { response.success(users); }, function (error) { response.error(error); }); });
我想在我的一个视图控制器中的viewDidLoad中调用registerActivity函数。 这是我迄今为止。 我需要一些帮助来完成这个function:
override func viewDidLoad() { super.viewDidLoad() let currentUser = PFUser.currentUser() PFCloud.callFunctionInBackground("registerActivity", withParameters: currentUser){ if (!error){ } } // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Register cell classes self.collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) }
我在“PFCloud”行中得到一个错误: PFUser is not identical to [NSOBject:Anyobject]
。 我怎样才能为当前用户调用这个registerActivity函数?
谢谢!
更新
在viewDidLoad中更新函数调用:
PFCloud.callFunctionInBackground("registerActivty", withParameters: nil, block: nil)
这导致一个例外:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[1]'
最后更新:这个解决了这个问题:
PFCloud.callFunctionInBackground("registerActivity", withParameters: [:], target: nil, selector: "block:")
谢谢您的帮助!
如果它已经login,则不需要给currentUser
。在服务器端, request.user
将已经设置为正在发出请求的login用户。 在这种情况下,您可以使用空字典参数调用云function。
另一方面,你得到的错误是因为PFUser对象不能被传递给云function。 您可以将用户标识作为["id": currentUser.objectId]
传递。 然后在服务器中,可以通过request.params.id
来访问它,以通过id
获取用户。 这是为了防止任何用户调用云function(即使没有login)。