2014-11-08 52 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