我正在編寫使用EKReminder的任務管理應用程序。 在一臺iOS設備上使用時可以很好地工作。如何觸發/強制以編程方式同步IOS提醒?
當我在兩臺設備(同一個蘋果帳戶)上使用時,我意識到提醒更改同步的延遲時間很長,甚至經常不完整。 (試過的iCloud,谷歌,公司前景)
因此,這似乎無關,我的應用程序(如果我直接在提醒iOS應用更改提醒同樣的情況)。
我可以通過編程的方式強制提醒與他們鏈接到的任何服務(例如iCloud)同步並觸發此功能嗎?
我正在編寫使用EKReminder的任務管理應用程序。 在一臺iOS設備上使用時可以很好地工作。如何觸發/強制以編程方式同步IOS提醒?
當我在兩臺設備(同一個蘋果帳戶)上使用時,我意識到提醒更改同步的延遲時間很長,甚至經常不完整。 (試過的iCloud,谷歌,公司前景)
因此,這似乎無關,我的應用程序(如果我直接在提醒iOS應用更改提醒同樣的情況)。
我可以通過編程的方式強制提醒與他們鏈接到的任何服務(例如iCloud)同步並觸發此功能嗎?
@Losiowaty建議在評論這個問題的有效解決方案,但我認爲有以下解決方案(S)可以提供更多的信息。爲了公平起見,我其實已經與蘋果提醒應用程序注意到了這個完全一樣的問題具體,並認爲,在一般的解決方案適用於iOS,但可以結轉到具有在MacOS類似的問題,以及相同的通知。
對於iOS,不過,這個問題似乎是:
第二,從我所知道的問題來看,沒有公認的問題是,這個問題是由於「主機」應用程序沒有正確地清除它自己的推送通知,可以這麼說。我的意思是:
這樣做的原因是推送通知沒有被應用程序清除,所以即使它現在是不相關的信息(因爲它被標記爲完成(或延後)其他設備上後清零)但推送通知系統並不知道(因爲推動僅僅是信息的有效載荷,除非你正確地對這些使用TTL,但是這是一個不同的答案)。解決這個問題的方法,大多數/某些應用程序在某種程度上可能會使用:
1)如註釋中所述,在第2點中,操作(標記爲已完成並從設備1清除)可能會更新後端(在這種情況下,iCloud)這個item
已完成,然後向所有關聯設備發送無聲推送,以正確清除推送通知(這可能會發生在應用程序後臺任務的形式中,如Notification Service Extension
Apple link here (iOS 10+ only)
2)另一種方法是對發送的每個推送通知(通過所有關聯設備)保持唯一的內部「祕密」密鑰。然後,您可以將任何一個「任務」對象(在提醒應用上下文中作爲示例,但這實際上可以是您的應用中保存的任何數據對象),並帶有一組推送通知「祕密」密鑰(可以過期一個自定義計時器,如果你覺得這些正在失控,特別是因爲在大多數使用情況下30天后推送可能是查看或不相關)。除此之外,如果應用程序通知設備有任何推送通知,它不應該(基於與「活動」數據相關聯的「祕密」密鑰集合)的應用程序更新它的數據,應該爲你清除它們。這最終得到與方法1相同的結果,但不需要靜默推送(可以使用套接字,或者完全使用其他套接字),並且可以依賴於基本的background job
它看起來像是任何一種方式,需要某種後臺任務處理,以便在發生問題時採取行動(通過通知服務擴展as linked或Apple支持的簡單background task)。
我希望這回答你的問題,並指出你在正確的方向爲你正在建設!
謝謝BHendricks。我不知何故一直希望有一個更簡單/更直接的解決方案(一些命令來觸發同步......)顯然不那麼簡單。欣賞解釋 – TPeter
有點冒險的解決方案是將提醒存儲在服務器上,並將靜默通知發送到與執行操作(添加/編輯/刪除)的用戶相關聯的其他設備。那些設備會下載更新的信息。如果它足夠小,它甚至可以放入通知中。 – Losiowaty