在我的iOS应用程序中,我想向手表发送一条消息:
NSMutableDictionary *message = @{@(1): @(1),
@(2): @"The String"}
[_watch appMessagesPushUpdate:message onSent:^(PBWatch *watch, NSDictionary *update, NSError *error) {
if (error != nil)
NSLog(@"Error sending message: %@", error);
}];
如果我这样发送它就有效。但是如果我的字符串更长或者我向字典添加了3或4个以上的密钥,则不会传递消息。错误是“应用程序未及时确认消息”。
在我的卵石App中,我执行以下操作:
static void message_handler(DictionaryIterator *iter, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "Received message.");
Tuple *msg_type_tuple = dict_find(iter, PebbleMessageKeyType);
Tuple *msg_value_tuple = dict_find(iter, PebbleMessageKeyValue);
write_line_on_screen(msg_value_tuple->value->cstring);
}
...
// Set sniff interval.
app_comm_set_sniff_interval(SNIFF_INTERVAL_NORMAL);
// Register message handlers
app_message_register_inbox_received(message_handler);
app_message_register_inbox_dropped(message_dropped);
// Init buffers
app_message_open(app_message_inbox_size_maximum(), app_message_outbox_size_maximum());
APP_LOG(APP_LOG_LEVEL_DEBUG, "App Message set up.");
我的想法是它与邮件大小有关。但我无法想象消息只能这么小? 在ToDo list example我看到他们使用了app_message_open,其中收件箱的值为64,而outbox参数的值为16。这个单位是什么意思? 64个字符?我怎么知道在iOS上,当它到达鹅卵石时我的信息有多大?
答案 0 :(得分:1)
调试此类问题时,首先要做的是添加一个message_dropped处理程序并打印失败原因:
void init() {
// ...
app_message_register_inbox_dropped(appmsg_in_dropped);
app_message_open(...);
// ...
}
static void appmsg_in_dropped(AppMessageResult reason, void *context) {
APP_LOG(APP_LOG_LEVEL_DEBUG, "In dropped: %i", reason);
}
您会找到原因代码in the documentation的列表。
两个最常见的问题是:
APP_MSG_BUFFER_OVERFLOW
:信息太大(见下文)APP_MSG_BUSY
:您发送的邮件太快了。在确认上一个消息之前,您无法发送新消息。消息的大小等于字典的大小。 dict_calc_buffer_size()的文档解释了如何计算它:
1 byte + 7 bytes for each key + the sum of the sizes of the values
最后,传递给app_message_open()的值是缓冲区大小(以字节为单位)。