2017-05-30 51 views
1

我已经做了作为the guide saysiOS和Google附近API:如何以正确的方式发布和订阅?

这则消息管理

[GNSMessageManager setDebugLoggingEnabled:YES]; 
messageManager = [[GNSMessageManager alloc] initWithAPIKey:API_KEY paramsBlock:^(GNSMessageManagerParams *params) { 
     params.bluetoothPowerErrorHandler = ^(BOOL hasError) { 
      // Update the UI for Bluetooth power 
     }; 
     params.bluetoothPermissionErrorHandler = ^(BOOL hasError) { 
      // Update the UI for Bluetooth permission 
     }; 
    }]; 

这是我的方法来发布和与附近的API订阅。

- (IBAction)onPublish:(id)sender { 
    NSLog(@"publish"); 
    NSString* str = @"hello world"; 
    NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding]; 
    GNSMessage* message = [GNSMessage messageWithContent:data]; 
    id<GNSPublication> publication = [messageManager publicationWithMessage:message paramsBlock:^(GNSPublicationParams *publicationParams) { 
     publicationParams.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams * strategyParams) { 
      strategyParams.allowInBackground = YES; 
      strategyParams.discoveryMediums = kGNSDiscoveryMediumsBLE; 
      strategyParams.discoveryMode = kGNSDiscoveryModeDefault; 
     }];; 
    }]; 
} 

- (IBAction)onSubscribe:(id)sender { 
    NSLog(@"subscribe"); 
    id<GNSSubscription> subscription = [messageManager subscriptionWithMessageFoundHandler:^(GNSMessage *msg) { 
     // Add the name to a list for display 
     NSLog(@"message found %@", [msg description]); 
    } messageLostHandler:^(GNSMessage *msg) { 
     // Add the name to a list for display 
     NSLog(@"message lost %@", [msg description]); 
    } paramsBlock:^(GNSSubscriptionParams *subscriptionParams) { 
     subscriptionParams.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams * strategyParams) { 
      strategyParams.allowInBackground = YES; 
      strategyParams.discoveryMediums = kGNSDiscoveryMediumsBLE; 
      strategyParams.discoveryMode = kGNSDiscoveryModeDefault; 
     }];; 
    }]; 
} 

Bletooth中央和外围背景功能都已启用,并且设置了外围设备的权限字符串。 最后,我在iOS设备上订阅并从另一个发布,但没有任何反应。

回答

2

请务必保留发布和订阅对象。当他们被释放时,他们停止发布/订阅。通常的方法是将它们作为属性/ ivars存储在您的某个类中。

开发人员文档在这一点上有误导性,我很抱歉。我们将在下一版本中改进文档。