2014-11-08 54 views
0

我正在构建一个应用程序,用户必须在收到本地通知后的5分钟内完成任务。如果任务完成,则不会发生任何事情,但如果任务未完成,则需要运行解析云代码功能。iOS检测如果用户不与本地通知进行交互

我的问题是,如果用户不与本地通知交互,我需要执行解析云功能。但是由于iOS挑剔的背景模式和多任务规则,我很难尝试这样做。

到目前为止,我的应用程序效果很好,但如果操作未完成,且用户不在应用程序中,我无法执行我的代码。

如果有人能指出我在正确的方向,我会很感激。如果您需要更多的细节,请让我知道!

云代码 -这是云的代码,我想执行,如果用户不reciving当地notifcation的五分钟之内完成了任务:

Parse.Cloud.define("chargeCustomer", function(request, response) { 
    Stripe.Charges.create({ 
    amount: request.params['amount'], 
    currency: "usd", 
    customer: request.params['customerId'] 
    }, { 
    success: function(customer) { 
     response.success(charge.id); 
    }, 
    error: function(error) { 
     response.error("Error:" +error); 
    } 
    }) 
}); 

谢谢!

回答

1

您是否研究过在Cloud Code中运行作业?

假设您创建了一个名为“PushNotification”的新类。假设您为名为“processed”的类添加布尔列/属性。

当用户获取并查看PUSH通知时,可以更新与该PUSH通知对应的“PushNotification”对象,并将“handled”设置为YES/true。

您可以编写一个简单的作业,每X分钟运行一次。这可能是这样的:

Parse.Cloud.job("checkPushes", function (request, status) { 
    var PushNotification = Parse.Object.extend("pushNotification"); 
    var query = new Parse.Query(PushNotification); 
    // Limit the query to objects created more than 5 minutes ago 
    query.lessThan("createdAt", new Date(new Date().getTime() - (1000 * 60 * 5))); 
    // Limit the query to objects where "actionPerformed" not equal to "true" 
    query.notEqualTo("handled", true); 
    query.each(function (pushNotification) { 
     // Don't forget to set "handled" to true so 
     // the same items don't keep popping up... 
    }); 
}); 

你可以找到更多关于云计算代码(特别是后台作业)here

+0

我有点困惑。我在解析背景作业方面做了一些研究,似乎是一个很好的解决方案。不过,我使用本地通知来提醒用户不要推送。如果用户设置闹钟重复每天,每个工作日等等,我该怎么办?如果任务没有完成,我更新了我想要执行的云代码的问题。谢谢! – Jack 2014-11-08 20:07:23

+0

有什么想法?然后运行后台作业必须有一个更简单的方法。因为那么我需要将警报保存在设备上并进行解析。 – Jack 2014-11-09 22:50:41

+0

如果您无法确定用户是否正在运行应用程序,您希望如何在设备上进行此操作?您必须控制代码执行,这意味着云代码。至少,我想不出一种方法让你控制这个设备。您无法强制用户打开您的应用程序,因此您无法强制代码在云中运行。如果是预定的本地通知,我会说你必须在Cloud Code中安排它,然后检查(在“5分钟之前”)用户是否做了一些事情。如果你找出其他的东西,让我知道。 – mbm29414 2014-11-10 00:55:17