我正在解析Gmail中的联系人,并在我的产品中创建同步功能。 但在我的脚本上,我很难确定哪些联系人从gmail中被“删除”。
实施例: 如果我的应用程序中有 John Doe ,还有Gmail ...(并且它们与gmailId同步)。稍后,如果用户删除联系人John Doe ,并运行我的SYNC, 如何确定该联系人已被删除?
我需要知道在我的数据库中抛出触发器以删除相同联系人的位置。我目前有这个来获取通过发送的每个联系人的信息。
$xml = simplexml_load_string($entry->getXML());
$obj = new stdClass;
// EDIT LINK
$obj->gmailUrl = rawurlencode($entry->id);
$obj->delete = (string) $xml->groupMembershipInfo['deleted'];
// FIRST Name
$obj->firstName = (string) $xml->name->givenName;
在我的代码中,我还使用这些额外的参数查询谷歌。
$query->setParam('updated-min', $updatedMin);
$query->setParam('showdeleted', 'true');
$query->setParam('requirealldeleted', 'true');
任何帮助将不胜感激!
答案 0 :(得分:1)
我不确定任何特定的钩子,也不能看到明显的deleted
字段,但这是另一种解决问题的方法......
当您执行完全同步或单项更新时,如果不再返回特定联系人,则可以将其标记为已删除。请注意,只有将showdeleted
保留为false
时才会有效。
示例...
$local = array(1, 3, 5, 7, 9);
您运行完全同步...
$remote = array(, 1, 3, 5, 9);
比较两个阵列将显示7已被删除。同样,如果您正在同步单个项目,如果它没有返回任何内容,您可以认为它已被删除。
答案 1 :(得分:1)
我发现Google在删除联系人时添加了一个名为Deleted的空XML标记。
像这样。
if(isset($xml->deleted)) { $deleted = "true"; } else { $deleted = NULL; }
$obj->delete = $deleted;
虽然Adrian的解决方案可行,但我觉得这不是最佳解决方案,因为我觉得Google必须为此做出答案,而不是检查每天是否有联系人。