这是来自this 邮递我正在使用一项服务,该服务可以自动向Onesignal注册用户的设备。
我使用脚本标记内的gonative\\u onesignal\\u info()调用函数(这可以用onesignal完美地注册设备):
function pmr_onesignal_script() { ?>
<script>
var data = gonative_onesignal_info(info);
var xmlhttp = new XMLHttpRequest();
// Push user ID with this line
xmlhttp.open(\'GET\', \'register-user.php?oneSignalPushToken=\' + data.oneSignalPushToken, true);
xmlhttp.send();
</script>
<?php
}
add_action( \'wp_head\', \'pmr_onesignal_script\', 10, 2 );
内部注册用户。php我有:
function pmr_onesignal_mobile_registration( $user_login, $user ) {
// Get user data
$user_id = $user->ID;
$user_email = $user->user_email;
$oneSignalPushToken = $_GET[\'oneSignalPushToken\'];
update_user_meta( $user_id, \'oneSignalPushToken\', $oneSignalPushToken);
}
add_filter( \'wp_login\', \'pmr_onesignal_mobile_registration\', 10, 2 );
然而,似乎oneSignalPushToken实际上从未被推送到文件中,也从未保存给用户。你知道我可能做错了什么吗?提前感谢!
SO网友:kaiser
首先,您的设置很难理解。看起来,从客户端到服务器/JS到PHP交换数据的唯一原因是您有一些全局info
JS对象和一些gonative_onesignal_info()
方法也许可以找到一些PHP SDK,或者同步地检索这些信息(在输入字段中输入数据,执行常规请求以重新加载页面)。到目前为止,看起来你正试图以一种非常……非传统的方式实现你的目标。
使用正确的HTTP方法,您正在通过HTTP交换数据GET
要求您不是浏览器,请使用POST
那里您正在发送数据,而不仅仅是挥手表示您已准备好检索数据。使用正确的请求类型很重要,因为在大多数情况下,服务器的这些协议都是作为默认值正确实现的。有关的详细信息MDN here. 通过引用突出显示一位:
不安全的请求会修改服务器的状态,用户不应无意中重新发送这些请求。
通常,您don\'t want your users to resend PUT, POST or DELETE
requests. 如果您作为该请求的结果提供响应,只需按一下重新加载按钮即可重新发送该请求(可能在收到确认消息后)。
在这种情况下,服务器可以发回303
(请参阅其他)对包含正确信息的URL的响应。如果按下重新加载按钮,则只会重新显示该页面,而不会重播不安全的请求。
这一点很重要,因为您永远不会知道另一端(远程服务器或其主机)何时会更改其体系结构并在两者之间安装任何类型的代理(负载平衡器、安全网关等)。
使用提供的API,您还需要切换到WP HTTP API. 这为使用与之交互的插件打开了大门。它还通过所谓的挂钩和过滤器触发您可能不知道的内置机制。
你可以看看你的表现remote requests 可以在WordPress中以安全的方式完成:
$request = wp_remote_post( \'http://example.com\' );
$response = wp_remote_retrieve_body( $request );
if (
\'OK\' !== wp_remote_retrieve_response_message( $response )
OR 200 !== wp_remote_retrieve_response_code( $response )
)
wp_send_json_error( $response );
wp_send_json_success( $response );
WordPress还有
WP AJAX API 这样你就可以
服务器和客户端之间异步交换数据再次使第三方软件能够增强您的请求更多信息,请访问this answer.