pebble-watch - 在表上,不接收 PebbleKit iOS发送的消息

  显示原文与译文双语对照的内容

在我的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个键,则消息将不会传递。 错误为"该应用未及时确认消息"。

在我的pebble应用程序中,我执行以下操作:


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.");

我认为它与消息大小有关。 在待办事项列表中,我看到他们使用了app_message_open值为 inbox,outbox为 outbox parameter 。 这个单位是什么单位? 我怎么知道我的邮件到达鹅卵石时的大小?

时间: 作者:

调试此类问题时,你应该首先添加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);
}

你将在文档列表中找到原因代码的列表( ) 。

这两个最常见的问题是:

  1. APP_MSG_BUFFER_OVERFLOW: 消息太大( 请参见下面)
  2. 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()的值是字节的缓冲区大小。

作者:
...