2017-02-17 55 views
0

我正在尝试使用Google Nearby来发送使用精确超声波(而不是BLE或WiFi)的消息。我不知道为什么它不起作用。 我还没有找到任何额外的步骤来获得这项工作。谷歌在iOS和Android之间附近发送超声波消息

没有错误。日志说,发布是成功的。但用户根本不反应

应用程序是否应请求麦克风权限? 应该检查应用程序吗? iOS和Android之间是否有超声消息的准备工作示例?

iOS的部分:

@implementation ViewController { 
    GNSMessageManager *_messageManager; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _messageManager = [[GNSMessageManager alloc] 
      initWithAPIKey:@"MY_API_KEY" 
       paramsBlock:^(GNSMessageManagerParams *params) { 
        params.microphonePermissionErrorHandler = ^(BOOL hasError) { 
         NSLog(@"Microphone Permission Error:%@", hasError ? @"YES" : @"NO"); 

        }; 
        params.bluetoothPowerErrorHandler = ^(BOOL hasError) { 
         NSLog(@"Bluetooth Power Error:%@", hasError ? @"YES" : @"NO"); 

        }; 
        params.bluetoothPermissionErrorHandler = ^(BOOL hasError) { 
         NSLog(@"Bluetooth Permission Error:%@", hasError ? @"YES" : @"NO"); 
        }; 
       }]; 
    [GNSMessageManager setDebugLoggingEnabled:YES]; 
    [GNSPermission setGranted:YES]; 
    GNSPermission *nearbyPermission = [[GNSPermission alloc] initWithChangedHandler:^(BOOL granted) { 
     NSLog(@"Nearby Permission:%@", granted ? @"YES" : @"NO"); 
    }]; 

    id <GNSSubscription> subscription = [_messageManager subscriptionWithMessageFoundHandler:^(GNSMessage *message) { 
       NSLog(@"subscriptionWithMessageFoundHandler"); 

       UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Google Nearby Message" message:[[NSString alloc] initWithData:message.content encoding:NSUTF8StringEncoding] preferredStyle:UIAlertControllerStyleAlert]; 
       [alertController addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil]]; 
       [self presentViewController:alertController animated:YES completion:nil]; 
      } 
                      messageLostHandler:^(GNSMessage *message) { 
                       // Remove the name from the list 
                      } 
                       paramsBlock:^(GNSSubscriptionParams *subscriptionParams) { 
                        subscriptionParams.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams *params) { 
                         params.discoveryMediums = kGNSDiscoveryMediumsAudio; 
                         params.discoveryMode = kGNSDiscoveryModeScan; 
                        }]; 
                       } 
    ]; 


} 


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

- (IBAction)publishDidClick:(id)sender { 
    NSString *string = self.publisherField.text; 
    if (string == nil || string.length == 0) { 
     UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Google Nearby" message:@"Please put some text into field before publishing" preferredStyle:UIAlertControllerStyleAlert]; 
     [alertController addAction:[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil]]; 
     [self presentViewController:alertController animated:YES completion:nil]; 

    } else { 
     @try { 
      GNSMessage *gnsMessage = [GNSMessage messageWithContent:[string dataUsingEncoding:NSUTF8StringEncoding]]; 
      id <GNSPublication> publication = [_messageManager publicationWithMessage:gnsMessage 
                      paramsBlock:^(GNSPublicationParams *params) { 
                       params.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams *params) { 
                        params.discoveryMediums = kGNSDiscoveryMediumsAudio; 
                       }]; 
                      }]; 

     } 
     @catch (NSException *exception) { 
      NSLog(@"Exception occurred: %@, %@", exception, [exception userInfo]); 
     } 
    } 


} 

iOS的日志:

2017-02-17 22:33:33.701925 GoogleNearbySample[5727:1608902] Nearby Permission:YES 
2017-02-17 22:33:35.842523 GoogleNearbySample[5727:1608902] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles 
2017-02-17 22:33:35.853836 GoogleNearbySample[5727:1608902] [MC] Reading from public effective user settings. 
2017-02-17 22:33:40.630279 GoogleNearbySample[5727:1608902] Publish (mediums: 1, broadcast/scan: 3, beacons: 0/0/0, background: 0) 
2017-02-17 22:33:40.677551 GoogleNearbySample[5727:1608902] Unpublish 
2017-02-17 22:33:40.681520 GoogleNearbySample[5727:1608902] Tokens: 0 good, 0 bad, 0 broadcast 
2017-02-17 22:33:40.681663 GoogleNearbySample[5727:1608902] Report RPC request: 0 token(s), 0 beacon(s), 0 directive(s) 
2017-02-17 22:33:40.705243 GoogleNearbySample[5727:1608902] Report RPC request: Publish: 1 
2017-02-17 22:33:40.705933 GoogleNearbySample[5727:1608902] Report RPC request: Unpublish: 1 
2017-02-17 22:33:41.625510 GoogleNearbySample[5727:1608902] Report RPC response: Success 
2017-02-17 22:33:41.626823 GoogleNearbySample[5727:1608902] Report RPC response: 6 directive(s), 0 token(s), 0 message(s), 1 publication results(s), 0 subscription results(s) 
2017-02-17 22:33:41.641955 GoogleNearbySample[5727:1608902] Tokens: 0 good, 0 bad, 0 broadcast 
2017-02-17 22:33:41.642170 GoogleNearbySample[5727:1608902] Report RPC request: 0 token(s), 0 beacon(s), 0 directive(s) 
2017-02-17 22:33:41.889006 GoogleNearbySample[5727:1608902] Report RPC response: Success 
2017-02-17 22:33:41.889370 GoogleNearbySample[5727:1608902] Report RPC response: 0 directive(s), 0 token(s), 0 message(s), 0 publication results(s), 0 subscription results(s) 
2017-02-17 22:33:46.337377 GoogleNearbySample[5727:1608902] Publish (mediums: 1, broadcast/scan: 3, beacons: 0/0/0, background: 0) 
2017-02-17 22:33:46.342647 GoogleNearbySample[5727:1608902] Unpublish 
2017-02-17 22:33:46.350383 GoogleNearbySample[5727:1608902] Tokens: 0 good, 0 bad, 0 broadcast 
2017-02-17 22:33:46.350746 GoogleNearbySample[5727:1608902] Report RPC request: 0 token(s), 0 beacon(s), 0 directive(s) 
2017-02-17 22:33:46.351382 GoogleNearbySample[5727:1608902] Report RPC request: Publish: 1 
2017-02-17 22:33:46.351675 GoogleNearbySample[5727:1608902] Report RPC request: Unpublish: 1 
2017-02-17 22:33:46.937869 GoogleNearbySample[5727:1608902] Report RPC response: Success 
2017-02-17 22:33:46.938223 GoogleNearbySample[5727:1608902] Report RPC response: 6 directive(s), 0 token(s), 0 message(s), 1 publication results(s), 0 subscription results(s) 
2017-02-17 22:33:46.951400 GoogleNearbySample[5727:1608902] Tokens: 0 good, 0 bad, 0 broadcast 
2017-02-17 22:33:46.951618 GoogleNearbySample[5727:1608902] Report RPC request: 0 token(s), 0 beacon(s), 0 directive(s) 
2017-02-17 22:33:47.174414 GoogleNearbySample[5727:1608902] Report RPC response: Success 
2017-02-17 22:33:47.174676 GoogleNearbySample[5727:1608902] Report RPC response: 0 directive(s), 0 token(s), 0 message(s), 0 publication results(s), 0 subscription results(s) 

Android部分:

public class MainActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 12341; 
    private GoogleApiClient mGoogleApiClient; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     View view = findViewById(R.id.button); 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       PublishOptions publishOptions = new PublishOptions.Builder().setStrategy(new Strategy.Builder().setDiscoveryMode(Strategy.DISCOVERY_MODE_SCAN) 
         .setDistanceType(Strategy.DISTANCE_TYPE_EARSHOT).build()).build(); 
       Nearby.Messages.publish(mGoogleApiClient, new Message("Hello Artur".getBytes()), publishOptions).setResultCallback(new ResultCallback<Status>() { 
        @Override 
        public void onResult(@NonNull Status status) { 
         Log.i("Nearby", status.getStatusMessage()); 
        } 
       }); 

      } 
     }); 
     int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO); 
     if (permissionCheck == PackageManager.PERMISSION_GRANTED) { 
      mGoogleApiClient = new GoogleApiClient.Builder(this) 
        .addApi(Nearby.MESSAGES_API) 
        .addConnectionCallbacks(this) 
        .enableAutoManage(this, this) 
        .build(); 

     } else { 
      ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.RECORD_AUDIO}, 
        MY_PERMISSIONS_REQUEST_READ_CONTACTS); 
     } 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     SubscribeOptions subscribeOptions = new SubscribeOptions.Builder() 
       .setStrategy(new Strategy.Builder().setDiscoveryMode(Strategy.DISCOVERY_MODE_SCAN) 
         .setDistanceType(Strategy.DISTANCE_TYPE_EARSHOT).build()).build(); 
     Nearby.Messages.subscribe(mGoogleApiClient, new MessageListener() { 
      @Override 
      public void onFound(Message message) { 
       super.onFound(message); 
       Log.i("Nearby", "Subscribed found."); 
       Toast.makeText(getApplicationContext(), new String(message.getContent()), Toast.LENGTH_LONG).show(); 

      } 
     }, subscribeOptions).setResultCallback(new ResultCallback<Status>() { 
      @Override 
      public void onResult(Status status) { 
       if (status.isSuccess()) { 
        Log.i("Nearby", "Subscribed successfully."); 
       } else { 
        Log.i("Nearby", "Could not subscribe."); 
        // Check whether consent was given; 
        // if not, prompt the user for consent. 
        handleUnsuccessfulNearbyResult(status); 
       } 
      } 
     }); 
    } 

    private void handleUnsuccessfulNearbyResult(Status status) { 
     Log.i("Nearby", "Processing error, status = " + status); 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Log.d("onConnectionSuspended", String.valueOf(i)); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     Log.d("onConnectionFailed", connectionResult.getErrorMessage()); 

    } 
} 

的Android日志:

02-17 22:32:56.158 11325-11325/? I/Nearby: Subscribed successfully. 
02-17 22:32:59.929 11325-11325/? D/NearbyMessagesClient: Emitting client lifecycle event ACTIVITY_STOPPED 
02-17 22:32:59.930 11325-11325/? D/NearbyMessagesClient: Emitting client lifecycle event CLIENT_DISCONNECTED 
02-17 22:33:28.890 11325-11325/? I/Nearby: Subscribed successfully. 
02-17 22:33:45.867 11325-11325/? I/Nearby: SUCCESS 
02-17 22:33:46.542 11325-11325/? I/Nearby: SUCCESS 
02-17 22:33:47.137 11325-11325/? I/Nearby: SUCCESS 
02-17 22:33:47.779 11325-11325/? I/Nearby: SUCCESS 
02-17 22:33:48.422 11325-11325/? I/Nearby: SUCCESS 
02-17 22:33:49.053 11325-11325/? I/Nearby: SUCCESS 
02-17 22:34:18.477 11325-11325/? D/NearbyMessagesClient: Emitting client lifecycle event ACTIVITY_STOPPED 
02-17 22:34:18.479 11325-11325/? D/NearbyMessagesClient: Emitting client lifecycle event CLIENT_DISCONNECTED 
02-17 22:36:47.996 11325-11325/? D/NearbyMessagesClient: Failed to emit client lifecycle event ACTIVITY_STOPPED due to GmsClient being disconnected 
02-17 22:36:47.997 11325-11325/? D/NearbyMessagesClient: Failed to emit client lifecycle event CLIENT_DISCONNECTED due to GmsClient being disconnected 
+0

当你说它“不起作用”时,你需要更详细地解释什么不起作用,你得到的错误,预期的结果以及发生了什么。还有问题发生在哪一行代码。 – Emil

+0

@Emil你说得对。没有错误。日志说,发布是成功的。但用户根本没有反应 –

+0

您可以粘贴您在运行应用程序时看到的控制台日志消息并开始发布/订阅吗?你已经打开了调试日志记录,所以你应该看到这样的日志: 服务器URL:... 设备ID:... ... –

回答

2

Artur,您需要将发布对象存储在属性或ivar中。只要发布对象存在,该发布就处于活动状态。要停止发布,请释放发布对象。订阅同上。

我知道Cocoapod documentation中的pub/sub代码示例有误导性。我将在下一个版本中修复它。