在iOS上无法从Pebble接收AppMessage

时间:2014-01-17 14:15:57

标签: ios objective-c pebble-watch

在Watch上我发送了一个像这样的AppMessage

DictionaryIterator *iter;
app_message_outbox_begin(&iter);
Tuplet value = TupletInteger(MESSAGE_TYPE, MESSAGETYPE_REFRESH);
dict_write_tuplet(iter, &value);
app_message_outbox_send();

我按照the tutorial中的说明为我的应用设置了背景模式和协议。 在iOS中,我设置了这样的监听器:

[PBPebbleCentral defaultCentral].delegate = self;
self.watch = [PBPebbleCentral defaultCentral].lastConnectedWatch;

NSLog(@"Pebble name: %@", _watch.name);
NSLog(@"Pebble serial number: %@", _watch.serialNumber);

[_watch appMessagesAddReceiveUpdateHandler:^BOOL(PBWatch *watch, NSDictionary *update) {
    NSLog(@"Update received!");
    return YES;
}];

[_watch appMessagesAddReceiveAllUpdatesHandler:^BOOL(PBWatch *watch, NSUUID *uuid, NSDictionary *update) {
    NSLog(@"AllUpdate received!");
    return YES;
}];

[_watch appMessagesAddAppLifecycleUpdateHandler:^(PBWatch *watch, NSUUID *uuid, PBAppState newAppState) {
    NSLog(@"AppLifecycleUpdate received!");
}];

我已经从手机发送消息到手表了。这样它的工作原理。但是电话上传入消息的听众不会被叫到。 在时钟上我得到APP_MSG_SEND_TIMEOUT作为错误代码。我错了什么?

3 个答案:

答案 0 :(得分:1)

你的手表应用程序中有src / js / pebble-js-app.js吗?我有同样的问题,当我删除这个生成的文件时,它开始工作。

答案 1 :(得分:0)

检查以确保您使用

appMessagesAddReceiveUpdateHandler:withUUID:

而不是

appMessagesAddReceiveUpdateHandler:

答案 2 :(得分:0)

注意放置听众的位置。例如,如果您使用的是WeatherDemo应用程序(由Pebble提供),则应在设置应用程序UUID后执行此操作。

// Test if the Pebble's firmware supports AppMessages / Weather:
  [watch appMessagesGetIsSupported:^(PBWatch *watch, BOOL isAppMessagesSupported) {
    if (isAppMessagesSupported) {
      ...

        [_targetWatch appMessagesAddReceiveUpdateHandler:^BOOL(PBWatch *watch, NSDictionary *update) {
            NSLog(@"Received message: %@", update);

            return YES;
        }];
    } else {
....

要注意的另一件事是不要把它放在下面 - (void)pebbleCentral:(PBPebbleCentral*)central watchDidConnect:(PBWatch*)watch isNew:(BOOL)isNew 因为如果设备已经连接,则不会调用此函数。