Cloud pebble does not receive data from iOS app?

257 views Asked by At

Everything working good to taking watch information but when i transfer data iOS app to watch app,i am getting error some time my logs says message sent successfully.eventhough message sent,my pebble watch does not receive any data.it simply goes empty window in my pebble watch.

i am using cloud pebble for pebble watch app and iOS version 8.3,xcode 6.3.1

c code:

#include <pebble.h>

static TextLayer *hello_text_layer;

static void message_received(DictionaryIterator *iterator, void *context) {

  char *message = dict_find(iterator, 0)->value->cstring;
  text_layer_set_text(hello_text_layer,message);
  text_layer_set_font(hello_text_layer, fonts_get_system_font(FONT_KEY_ROBOTO_BOLD_SUBSET_49));


}

int main(void) {
  app_message_register_inbox_received(message_received);
  app_message_open(app_message_inbox_size_maximum(), 0);

  Window *first_window = window_create();

  hello_text_layer = text_layer_create(GRect(10, 10, 124, 148));
  text_layer_set_text(hello_text_layer, "Welcome");
  layer_add_child(window_get_root_layer(first_window), text_layer_get_layer(hello_text_layer));

  window_stack_push(first_window, true);

  app_event_loop();

  text_layer_destroy(hello_text_layer);
  window_destroy(first_window);
}

iOS code:

- (void)viewDidLoad {
    [super viewDidLoad];
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    self.watch = [delegate getConnectedWatch];

    // Check the watch object is available
    if(self.watch) {
        NSLog(@"i think got its work");
        [self.watch getVersionInfo:^(PBWatch *watch, PBVersionInfo *versionInfo ) {
            NSLog(@"Pebble name: %@", [watch name]);
            NSLog(@"Pebble serial number: %@", [watch serialNumber]);
            NSLog(@"Pebble firmware os version: %li", (long)versionInfo.runningFirmwareMetadata.version.os);
            NSLog(@"Pebble firmware major version: %li", (long)versionInfo.runningFirmwareMetadata.version.major);
            NSLog(@"Pebble firmware minor version: %li", (long)versionInfo.runningFirmwareMetadata.version.minor);
            NSLog(@"Pebble firmware suffix version: %@", versionInfo.runningFirmwareMetadata.version.suffix);
        } onTimeout:^(PBWatch *watch) {
            NSLog(@"Timed out trying to get version info from Pebble.");
        }];


        [self.watch appMessagesGetIsSupported:^(PBWatch *watch, BOOL isAppMessagesSupported) {
            if(isAppMessagesSupported) {
                // Tell the user using the Label
                NSLog(@"can send data to watch");
            } else {
                NSLog(@"cannot send data to watch");
            }
        }];

    }

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)send:(id)sender {

    [self.watch appMessagesLaunch:^(PBWatch *watch, NSError *error) {
        if (!error) {
            NSLog(@"Successfully launched app.");
        }
        else {
            NSLog(@"Error launching app - Error: %@", error);
        }
    }
     ];
    // Register to receive events
    [[PBPebbleCentral defaultCentral] setDelegate:self];
    // Set UUID
        uuid_t myAppUUIDbytes;
        NSUUID *myAppUUID = [[NSUUID alloc] initWithUUIDString:@"37cec7a8-8195-4b9f-9a1b-696b7e05ba1b"];
          [myAppUUID getUUIDBytes:myAppUUIDbytes];
        [[PBPebbleCentral defaultCentral] setAppUUID:[NSData dataWithBytes:myAppUUIDbytes length:16]];

    NSDictionary *message = @{@(0):@"optisol",
                              };
    NSLog(@"%@",message);
    [self.watch appMessagesPushUpdate:message onSent:^(PBWatch *watch, NSDictionary *update, NSError *error) {
        NSLog(@"getting called");
        if (!error) {
            NSLog(@"Message sent!!!!!!!!");
        }
        else
        {
            NSLog(@"Message not sent!!!!!!!!\n\n%@",error.localizedDescription);

        }


    }];

    [self.watch appMessagesAddReceiveUpdateHandler:^BOOL(PBWatch *watch, NSDictionary *update) {
        // Process incoming messages
        if([update objectForKey:[NSNumber numberWithInt:0]]) {
            // Up button was pressed!

            NSLog(@"value received form pebble");

        }



        return YES;
    }];
}

some time i getting this error also:

Error launching app - Error: Error Domain=com.pebble.iossdk.public Code=10 "The watch did not acknowledge the pushed update in time." UserInfo=0x166b9120 {NSLocalizedDescription=The watch did not acknowledge the pushed update in time.}
1

There are 1 answers

0
karthikeyan On

Finally i found out solution to my question.. Here explained well.

I have changed my c code to like this

APP_LOG(APP_LOG_LEVEL_INFO, "Message received!");
    Tuple *t = dict_read_first(iterator);

  while (t != NULL) {
    // Long lived buffer
        static char s_buffer[64];
        APP_LOG(APP_LOG_LEVEL_INFO, "Message ready to get!");
        snprintf(s_buffer, sizeof(s_buffer), "'%s'", t->value->cstring);
        text_layer_set_text(hello_text_layer, s_buffer);
    // Get next pair, if any
    t = dict_read_next(iterator);
  }

Working fine..