واجهة برمجة تطبيقات الاتصالات الآمنة

بعد رصد جهاز بعيد، يتم استدعاء الوظيفة handleIntent حان الوقت للبدء في تمرير البيانات بين العملاء. يتناول هذا القسم في ما يلي أربع خطوات أساسية للحفاظ على أمان الاتصال:

  • فتح اتصال
  • جارٍ قبول عملية الربط
  • إرسال البيانات واستلامها
  • جارٍ إغلاق الاتصال

فتح اتصال

لفتح اتصال لتلقّي بيانات من جهاز بعيد، استخدِم تم استلام كائن المشارك مسبقًا وتحديد CHANNEL_NAME:

KotlinJava
participant
 
.openConnection(CHANNEL_HELLO)
 
.onFailure { /* handle failure */}
 
.getOrNull()
 
?.let { connection ->
    connection
.send("Hello, world".toByteArray(UTF_8)).onFailure { /* handle failure */}
 
}
public void openConnection(Participant participant) {
 
Futures.addCallback(
      participant
.openConnectionFuture(CHANNEL_HELLO),
     
new FutureCallback<RemoteConnection>() {
       
@Override
       
public void onSuccess(RemoteConnection remoteConnection) {
         
// use remoteConnection object to pass data, e.g.:
          sendDataToRemoteConnection
(remoteConnection);
       
}

       
@Override
       
public void onFailure(Throwable t) {
         
// handle error opening a remote connection
       
}
     
},
      mainExecutor
);
}

private void sendDataToRemoteConnection(RemoteConnection remoteConnection) {
 
Futures.addCallback(
      remoteConnection
.sendFuture("Hello, world".getBytes()),
     
new FutureCallback<Void>() {
       
@Override
       
public void onSuccess(Void result) {
         
// data sent successfully
       
}

       
@Override
       
public void onFailure(Throwable t) {
         
// handle error
       
}
     
},
      mainExecutor
);
}

القبول والإرسال/الاستلام وإغلاق الاتصال

تتطلب الاتصالات الآمنة أن يقبل الجهاز المستقبِل الاتصالات الواردة. قبل تلقي البيانات. لقبول الاتصال عن بُعد، استخدِم ما يلي: المقتطف:

KotlinJava
suspend fun acceptIncomingConnection(participant: Participant) {
 
val connection = participant.acceptConnection(CHANNEL_HELLO).getOrThrow()
  connection
.registerReceiver(
   
object : ConnectionReceiver {
     
override fun onMessageReceived(remoteConnection: RemoteConnection, payload: ByteArray) {
        displayMessage
(payload.toString(UTF_8))
     
}

     
override fun onConnectionClosed(
        remoteConnection
: RemoteConnection,
        error
: Throwable?,
        reason
: String?
     
) {
       
// handle connection closure
     
}
   
}
 
)
}
public void acceptIncomingConnection(Participant participant) {
 
// Registers call back to accept incoming remote connection
 
Futures.addCallback(
      participant
.acceptConnectionFuture(CHANNEL_HELLO),
     
new FutureCallback<>() {
       
@Override
       
public void onSuccess(RemoteConnection result) {
          receiveData
(result);
       
}

       
@Override
       
public void onFailure(Throwable t) {
         
// handle connection error
       
}
     
},
      mainExecutor
);
}

private void receiveData(RemoteConnection remoteConnection) {
  remoteConnection
.registerReceiver(
     
new ConnectionReceiver() {
       
@Override
       
public void onMessageReceived(RemoteConnection remoteConnection, byte[] payload) {
          displayMessage
(new String(payload, UTF_8));
       
}

       
@Override
       
public void onConnectionClosed(
           
RemoteConnection remoteConnection,
           
@Nullable Throwable error,
           
@Nullable String reason) {
         
// handle connection closure
       
}
     
});
}