Share via


ProximityDevice.PublishBinaryMessage 메서드

정의

오버로드

PublishBinaryMessage(String, IBuffer, MessageTransmittedHandler)

지정된 메시지 유형의 구독자에게 이진 데이터가 포함된 메시지를 게시합니다. 지정된 처리기는 메시지가 전송될 때 호출됩니다.

PublishBinaryMessage(String, IBuffer)

지정된 메시지 형식의 구독자에게 이진 데이터가 포함된 메시지를 게시합니다.

PublishBinaryMessage(String, IBuffer, MessageTransmittedHandler)

지정된 메시지 유형의 구독자에게 이진 데이터가 포함된 메시지를 게시합니다. 지정된 처리기는 메시지가 전송될 때 호출됩니다.

public:
 virtual long long PublishBinaryMessage(Platform::String ^ messageType, IBuffer ^ message, MessageTransmittedHandler ^ messageTransmittedHandler) = PublishBinaryMessage;
/// [Windows.Foundation.Metadata.Overload("PublishBinaryMessageWithCallback")]
long PublishBinaryMessage(winrt::hstring const& messageType, IBuffer const& message, MessageTransmittedHandler const& messageTransmittedHandler);
[Windows.Foundation.Metadata.Overload("PublishBinaryMessageWithCallback")]
public long PublishBinaryMessage(string messageType, IBuffer message, MessageTransmittedHandler messageTransmittedHandler);
function publishBinaryMessage(messageType, message, messageTransmittedHandler)
Public Function PublishBinaryMessage (messageType As String, message As IBuffer, messageTransmittedHandler As MessageTransmittedHandler) As Long

매개 변수

messageType
String

Platform::String

winrt::hstring

구독자에게 전달할 메시지 유형입니다.

message
IBuffer

구독자에게 전달할 이진 메시지 데이터입니다.

messageTransmittedHandler
MessageTransmittedHandler

메시지가 전송될 때 호출할 처리기입니다.

반환

Int64

long long

long

게시된 메시지에 대한 고유한 게시 ID입니다.

특성

Windows 요구 사항

앱 기능
ID_CAP_PROXIMITY [Windows Phone] proximity ID_CAP_PROXIMITY [Windows Phone]

예제

Windows.Networking.Proximity.ProximityDevice proximityDevice;

private void PublishLaunchApp()
{
    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
    {
        // The format of the app launch string is: "<args>\tWindows\t<AppName>".
        // The string is tab or null delimited.

        // The <args> string must have at least one character.
        string launchArgs = "user=default";

        // The format of the AppName is: PackageFamilyName!PRAID.
        string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.

        string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;

        string launchAppMessage = launchArgs + "\tWindows\t" + appName;

        var dataWriter = new Windows.Storage.Streams.DataWriter();
        dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
        dataWriter.WriteString(launchAppMessage);
        var launchAppPubId =
        proximityDevice.PublishBinaryMessage(
            "LaunchApp:WriteTag", dataWriter.DetachBuffer(), 
            proximityWriteTagLaunchAppMessageTransmitCallback);
    }
}

private void proximityWriteTagLaunchAppMessageTransmitCallback(
    Windows.Networking.Proximity.ProximityDevice sender,
    long messageId)
{
    // The LaunchApp message has been successfully written to a tag.
}
   Private proximityDevice As Windows.Networking.Proximity.ProximityDevice

   Private Sub PublishLaunchApp()
       proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault()

   If proximityDevice IsNot Nothing Then
           ' The format of the app launch string is: "<args>" & vbTab & "Windows" vbTab & "<AppName>".
           ' The string is tab or null delimited.

           ' The <args> string must have at least one character.
           Dim launchArgs = "user=default"

           ' The format of the AppName is: PackageFamilyName!PRAID.
           Dim praid = "MyAppId" ' The Application Id value from your package.appxmanifest.

           Dim appName = Windows.ApplicationModel.Package.Current.Id.FamilyName & "!" & praid

           Dim launchAppMessage = launchArgs & vbTab & "Windows" & vbTab & appName

           Dim dataWriter = New Windows.Storage.Streams.DataWriter()
           dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE
           dataWriter.WriteString(launchAppMessage)
           Dim launchAppPubId =
              proximityDevice.PublishBinaryMessage(
                 "LaunchApp:WriteTag", dataWriter.DetachBuffer(),
                 AddressOf proximityWriteTagLaunchAppMessageTransmitCallback)
       End If
   End Sub

   Private Sub proximityWriteTagLaunchAppMessageTransmitCallback(
       sender As Windows.Networking.Proximity.ProximityDevice,
       messageId As Long)
       ' The LaunchApp message has been successfully written to a tag.
   End Sub

설명

동일한 메시지 유형의 여러 메시지를 게시할 수 있으며 각 게시에는 연결된 고유 ID가 있습니다.

PublishBinaryMessage 메서드에서 반환된 게시 ID를 StopPublishingMessage 메서드에 전달하여 메시지 게시를 중지할 수 있습니다.

StopPublishingMessage 메서드가 호출되거나 ProximityDevice가 해제될 때까지 메시지는 계속 게시됩니다.

SubscribeForMessage 메서드를 사용하여 게시된 메시지를 구독할 수 있습니다.

PublishMessage 메서드를 사용하여 근접 컴퓨터에 문자 메시지를 게시할 수 있습니다. PublishUriMessage 메서드를 사용하여 URI(Uniform Resource Identifier)를 근접 컴퓨터에 게시할 수 있습니다.

중요

근접 API는 인증, 암호화 또는 메시지 무결성을 제공하지 않습니다. 근접성을 사용하여 암호, 재무 데이터, 문자 메시지, 이메일, 사진 또는 정부 ID 번호와 같은 사용자 중요한 정보를 교환하지 마세요.

메시지 유형

[PublishBinaryMessage(String, IBuffer, MessageTransmittedHandler) 메서드를 사용하여 게시할 수 있는 메시지 유형에 대한 자세한 내용은 PublishBinaryMessage(String, IBuffer) 항목의 설명을 참조하세요.

추가 정보

적용 대상

PublishBinaryMessage(String, IBuffer)

지정된 메시지 형식의 구독자에게 이진 데이터가 포함된 메시지를 게시합니다.

public:
 virtual long long PublishBinaryMessage(Platform::String ^ messageType, IBuffer ^ message) = PublishBinaryMessage;
/// [Windows.Foundation.Metadata.Overload("PublishBinaryMessage")]
long PublishBinaryMessage(winrt::hstring const& messageType, IBuffer const& message);
[Windows.Foundation.Metadata.Overload("PublishBinaryMessage")]
public long PublishBinaryMessage(string messageType, IBuffer message);
function publishBinaryMessage(messageType, message)
Public Function PublishBinaryMessage (messageType As String, message As IBuffer) As Long

매개 변수

messageType
String

Platform::String

winrt::hstring

구독자에게 전달할 메시지 유형입니다.

message
IBuffer

구독자에게 전달할 이진 메시지 데이터입니다.

반환

Int64

long long

long

게시된 메시지에 대한 고유한 게시 ID입니다.

특성

Windows 요구 사항

앱 기능
ID_CAP_PROXIMITY [Windows Phone] proximity ID_CAP_PROXIMITY [Windows Phone]

예제

Windows.Networking.Proximity.ProximityDevice proximityDevice;

private void PublishLaunchApp()
{
    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();

if (proximityDevice != null)
    {
        // The format of the app launch string is: "<args>\tWindows\t<AppName>".
        // The string is tab or null delimited.

        // The <args> string must have at least one character.
        string launchArgs = "user=default";

        // The format of the AppName is: PackageFamilyName!PRAID.
        string praid = "MyAppId"; // The Application Id value from your package.appxmanifest.

        string appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + praid;

        string launchAppMessage = launchArgs + "\tWindows\t" + appName;

        var dataWriter = new Windows.Storage.Streams.DataWriter();
        dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
        dataWriter.WriteString(launchAppMessage);
        var launchAppPubId =
        proximityDevice.PublishBinaryMessage(
            "LaunchApp:WriteTag", dataWriter.DetachBuffer());
    }
}
Private proximityDevice As Windows.Networking.Proximity.ProximityDevice

Private Sub PublishLaunchApp()
    proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault()

If proximityDevice IsNot Nothing Then
        ' The format of the app launch string is: "<args>" & vbTab & "Windows" vbTab & "<AppName>".
        ' The string is tab or null delimited.

        ' The <args> string must have at least one character.
        Dim launchArgs = "user=default"

        ' The format of the AppName is: PackageFamilyName!PRAID.
        Dim praid = "MyAppId" ' The Application Id value from your package.appxmanifest.

        Dim appName = Windows.ApplicationModel.Package.Current.Id.FamilyName & "!" & praid

        Dim launchAppMessage = launchArgs & vbTab & "Windows" & vbTab & appName

        Dim dataWriter = New Windows.Storage.Streams.DataWriter()
        dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE
        dataWriter.WriteString(launchAppMessage)
        Dim launchAppPubId =
           proximityDevice.PublishBinaryMessage(
              "LaunchApp:WriteTag", dataWriter.DetachBuffer())
    End If
End Sub

설명

동일한 메시지 유형의 여러 메시지를 게시할 수 있으며 각 게시에는 연결된 고유 ID가 있습니다.

게시 ID(PublishBinaryMessage에서 검색됨)를 StopPublishingMessage에 전달하여 메시지 게시를 중지할 수 있습니다.

StopPublishingMessage가 호출되거나 ProximityDevice가 해제될 때까지 메시지는 계속 게시됩니다.

SubscribeForMessage 메서드를 사용하여 게시된 메시지를 구독할 수 있습니다.

PublishMessage 메서드를 사용하여 근접 컴퓨터에 문자 메시지를 게시할 수 있습니다. PublishUriMessage 메서드를 사용하여 URI(Uniform Resource Identifier)를 근접 컴퓨터에 게시할 수 있습니다.

중요

근접 API는 인증, 암호화 또는 메시지 무결성을 제공하지 않습니다. 근접성을 사용하여 암호, 재무 데이터, 문자 메시지, 이메일, 사진 또는 정부 ID 번호와 같은 사용자에 민감한 정보를 교환하지 마세요.

메시지 유형

messageType 매개 변수를 사용하여 게시된 메시지를 고유하게 식별하고 메시지의 의미와 의도한 구독자 대상을 정의하는 식별자를 제공합니다.

메시지 형식 값은 대/소문자를 구분하는 문자열로, 프로토콜, 점(.), 하위 형식으로 구성됩니다.

하위 형식은 각 문자가 RFC 3986에 정의된 영숫자 또는 유효한 URI 문자일 수 있는 문자 문자열입니다. 이러한 문자는 다음과 같습니다.

- . _ ~ : / ? # [ ] @ ! $ & ' ( ) * + , ; = %

하위 형식의 길이가 250자를 초과할 수 없습니다.

다음은 메시지 유형의 프로토콜 부분에 대해 지원되는 값입니다.

"Windows" 프로토콜

메시지에는 이진 데이터가 포함됩니다.

"WindowsUri" 프로토콜

메시지 데이터에는 URI(Uniform Resource Identifier)인 UTF-16LE 인코딩 문자열이 포함되어 있습니다.|

Windows는 사용자에게 해당 특정 URI 프로토콜의 기본값으로 구성된 앱에서 수신된 URI를 보도록 요청하여 "WindowsUri" 프로토콜로 메시지를 처리합니다. 예를 들어 http:// URI는 기본 웹 브라우저에서 열립니다. 다른 앱이 "WindowsUri"를 구독하는 경우에도 Windows는 기본 앱에서 URI를 엽니다.

이 프로토콜을 사용하여 PublishBinaryMessage 메서드를 호출하는 대신 PublishUriMessage 메서드를 사용합니다.

Windows를 실행하지 않는 컴퓨터에 URI를 게시하는 경우 컴퓨터에서 지원하는 근접 기술에 따라 URI의 형식이 자동으로 지정됩니다. 예를 들어 컴퓨터에서 근접성을 위해 NFC 하드웨어를 사용하는 경우 URI는 NDEF URI 레코드로 형식이 지정됩니다.

"WindowsUri" 메시지를 구독하는 경우 Windows 컴퓨터가 컴퓨터에서 지원하는 근접 기술 형식의 메시지를 수신하는 경우 Windows는 서식이 지정된 메시지를 읽고 URI만 메시지 콘텐츠로 반환합니다.

"WindowsMime" 프로토콜

메시지 데이터는 특정 마임 형식입니다. 예를 들어 메시지 데이터가 jpeg 이미지인 경우 메시지 유형은 "WindowsMime.image/jpeg"입니다.

Windows는 앱이 mime 콘텐츠에 대해 구독된 경우에도 수신된 마임 콘텐츠를 보도록 사용자에게 메시지를 표시하여 "WindowsMime" 메시지를 처리합니다.

Windows를 실행하지 않는 컴퓨터에 "WindowsMime" 메시지를 게시하는 경우 컴퓨터에서 지원하는 근접 기술에 따라 메시지 콘텐츠의 형식이 자동으로 지정됩니다. 예를 들어 컴퓨터에서 근접성을 위해 NFC 하드웨어를 사용하는 경우 메시지 콘텐츠의 형식은 NDEF Mime 레코드로 지정됩니다.

"WindowsMime" 메시지를 게시하는 경우 항상 mime 형식을 포함해야 합니다. "WindowsMime" 메시지를 구독하는 경우 모든 mime 형식을 구독하려면 mime 형식을 지정하지 않고 "WindowsMime"을 사용할 수 있습니다. 특정 mime 형식을 구독하고 Windows 컴퓨터가 컴퓨터에서 지원하는 근접 기술 형식의 메시지를 수신하는 경우 Windows는 서식이 지정된 메시지를 읽고 mime 콘텐츠만 메시지 콘텐츠로 반환합니다. 모든 mime 형식을 구독하는 경우 수신된 처음 256바이트는 ASCII mime 형식 문자열이고 나머지 바이트는 mime 콘텐츠입니다.

"Windows:WriteTag" 프로토콜

콘텐츠가 정적 태그에 쓰여지는 것을 제외하고는 Windows 프로토콜과 동일합니다. 메시지는 쓰기 가능한 정적 태그를 제외한 모든 디바이스로 전송되지 않습니다. 이 프로토콜은 게시에만 유효합니다. 이 프로토콜의 예로는 "Windows:WriteTag.SampleSubtype"이 있습니다.

"WindowsUri:WriteTag" 프로토콜

콘텐츠가 정적 태그에 쓰여지는 것을 제외하고는 WindowsUri 프로토콜과 동일합니다. 메시지는 쓰기 가능한 정적 태그를 제외한 모든 디바이스로 전송되지 않습니다. 이 프로토콜은 게시에만 유효합니다.

"WindowsMime:WriteTag" 프로토콜

콘텐츠가 정적 태그에 쓰여지는 것을 제외하고는 WindowsMime 프로토콜과 동일합니다. 메시지는 쓰기 가능한 정적 태그를 제외한 모든 디바이스로 전송되지 않습니다. 이 프로토콜은 게시에만 유효합니다. 이 프로토콜의 예로는 "WindowsMime:WriteTag.image/jpeg"가 있습니다.

"LaunchApp:WriteTag" 프로토콜

선택적 시작 매개 변수를 사용하여 특정 앱을 시작하는 데 사용할 수 있는 태그를 씁니다. LaunchApp:WriteTag 메시지를 태그에 게시하는 경우 해당 태그를 컴퓨터에 탭할 때의 결과는 PeerFinder.Start 메서드를 호출하고 시작 매개 변수를 전달하는 것과 같습니다. 메시지는 다음 형식의 탭 문자 또는 null 값으로 값이 구분되는 UTF-16LE로 인코딩된 문자열이어야 합니다.

<launch arguments>[tab]<app platform 1>[tab]<app name 1>...[tab]<app platform N>[tab]<app name N>

시작 인수는 선택 사항입니다. 메시지는 생략할 수 있습니다.

<app platform 1>[tab]<app name 1>...[tab]<app platform N>[tab]<app name N>

하나 이상의 앱 플랫폼 및 앱 이름을 지정해야 합니다. Windows 8 이상 컴퓨터용 앱 플랫폼은 Windows입니다. 근접 앱 ID의 형식은 패키지 패밀리 이름>입니다<.<앱 ID>입니다. Windows.ApplicationModel.Package.Current.Id.FamilyName 속성에서 패키지 패밀리 이름을 가져올 수 있습니다. 앱의 패키지 매니페스트에 있는 Application 요소의 Id 특성에서 앱 ID 값을 복사해야 합니다. 이 메시지의 예는 "user=default\tWindows\tExample.Proximity.JS_8wekyb3d8bbwe! Proximity.App".

다른 앱 플랫폼을 지원할 수도 있습니다. 자세한 내용은 AlternateIdentities를 참조하세요.

"WriteableTag" 프로토콜

이 메시지 프로토콜을 구독할 때 쓰기 가능한 태그를 근접으로 가져오는 경우 태그의 최대 쓰기 가능한 크기를 나타내는 int32 (little-endian)가 포함된 근접 메시지가 수신됩니다. 이 프로토콜은 구독에만 유효합니다.

"페어링:Bluetooth" 프로토콜

Windows는 이 메시지 유형을 구독하여 근접을 사용하여 Bluetooth 페어링을 완료합니다. 이 프로토콜은 앱에서 사용하기 위한 것이 아닙니다.

"NDEF" 프로토콜

메시지 내용은 올바른 형식의 NDEF 레코드입니다. 메시지 형식으로 NDEF를 사용하는 게시에 대한 콘텐츠의 기본 형식은 NDEF 레코드에 포함됩니다. NDEF 형식의 구독은 모든 NDEF 형식 메시지를 구독합니다.

"NDEF:ext" 프로토콜

메시지 데이터는 애플리케이션 정의 NDEF 레코드(0x04 TNF 필드 값)입니다.

이 프로토콜은 이러한 이벤트를 이미 구독하는 실행 중인 애플리케이션이 없는 경우 이러한 이벤트를 처리하도록 올바르게 구성된 애플리케이션을 시작합니다. NDEF:ext를 사용하여 특정 프로토콜을 처리하는 앱을 지정하려면 앱 매니페스트에 프로토콜 태그를 추가하여 앱을 시작할 URI를 지정해야 합니다. 적절한 매니페스트 구문은 다음 예제에서 설명합니다.

<Extensions>
  <Extension Category="windows.protocol">
    <Protocol Name="contoso.com+testapp" />
  </Extension>
</Extensions>

참고

앱 매니페스트에 사용되는 URI 형식은 NFC 태그에 사용되는 URI 형식과 약간 다릅니다. 즉, 매니페스트 URI는 ':' 문자가 아닌 '+' 문자를 사용한다는 것입니다. 위의 매니페스트 샘플을 사용하여 앱을 활성화하는 NFC 태그의 URI는 contoso.com:testapp입니다.

"NDEF:MIME" 프로토콜

메시지 데이터는 올바른 형식의 NDEF mime 메시지입니다(TNF 필드 값은 0x02). 예를 들어 "NDEF:MIME.image/jpeg"입니다. 이 프로토콜은 NDEF 콘텐츠를 게시할 때 NDEF를 사용하는 구독에만 적용됩니다.

"NDEF:URI" 프로토콜

메시지 데이터는 URI 네임스페이스(0x03 TNF 필드 값)로 정의된 형식의 올바른 형식의 NDEF 메시지입니다. 이 프로토콜은 NDEF 콘텐츠를 게시할 때 NDEF를 사용하는 구독에만 적용됩니다. 즉, 데이터 형식은 지정된 URI로 식별됩니다. 이 프로토콜의 예는 "NDEF:URI.http://contoso.com/sometype"입니다.

"NDEF:wkt" 프로토콜

메시지 데이터는 NFC 포럼(TNF 필드 값 0x01)에서 정의한 형식의 올바른 형식의 NDEF 메시지입니다. 이 형식의 예는 "NDEF:wkt입니다. 잘 알려진 URI 유형에 대한 U"입니다. 이 프로토콜은 NDEF 콘텐츠를 게시할 때 NDEF를 사용하는 구독에만 적용됩니다.

"NDEF:WriteTag" 프로토콜

메시지 데이터는 NFC 포럼 표준 정적 태그에 기록되어야 합니다. 메시지 데이터는 적절한 NDEF 형식이어야 합니다. 이 프로토콜은 게시에만 유효합니다.

"NDEF:Unknown" 프로토콜

메시지 데이터는 형식화되지 않은 NDEF 메시지(0x05 TNF 필드 값)입니다. 이 프로토콜은 NDEF 콘텐츠를 게시할 때 NDEF를 사용하는 구독에만 적용됩니다.

추가 정보

적용 대상