HoloLens에서 Twitter 인증 및 게시

HoloLens에서 Twitter 인증을 실시하고 게시하고 싶습니다! 그래서 조사해 보았습니다.

현재 HoloLens의 Direct3D 앱은 앱 내에서 브라우저를 사용할 수 없습니다. 그러므로, OAuth 중에서도 「PIN 인증」이라고 불리는 방법을 이용해 인증을 실시합니다.

그냥 AssetStore에, 「Let's Tweet In Unity」라고 하는 PIN 인증을 실시해 주는 무료의 Asset가 있으므로, 이쪽을 사용하겠습니다.

HashTable 수정



그대로는 컴파일이 통과하지 않으므로 아래 블로그를 참고로 HashTable 대신 Dictionary로 대체했습니다.
var headers = new Hashtable();
headers["Authorization"] = GetHeaderWithAccessToken("POST", PostTweetURL, consumerKey, consumerSecret, response, parameters);


var headers = new Dictionary<string, string>();
headers.Add("Authorization", GetHeaderWithAccessToken("POST", PostTweetURL, consumerKey, consumerSecret, response, parameters));

UWP용 수정



또한 HoloLens가 있지만 UWP 용으로 컴파일이 통과하지 않으므로 해시 화 부분을 수정합니다.

헤더에 추가
#if UNITY_WSA && !UNITY_EDITOR
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams;
#endif

"//Generate the hash"부분을 다시 작성 (#if 및 UWP 코드 추가)
#if UNITY_WSA && !UNITY_EDITOR
 var objMacProv = MacAlgorithmProvider.OpenAlgorithm("HMAC_SHA1");
 var messageBytes = Encoding.UTF8.GetBytes(signatureBaseString);
 var keyBytes = Encoding.UTF8.GetBytes(key);
 CryptographicKey hmacKey = objMacProv.CreateKey(keyBytes.AsBuffer());
 IBuffer buffHMAC = CryptographicEngine.Sign(hmacKey, messageBytes.AsBuffer());
 return Convert.ToBase64String(buffHMAC.ToArray());
#else
 // Generate the hash
 HMACSHA1 hmacsha1 = new HMACSHA1(Encoding.ASCII.GetBytes(key));
 byte[] signatureBytes = 
 hmacsha1.ComputeHash(Encoding.ASCII.GetBytes(signatureBaseString));
 return Convert.ToBase64String(signatureBytes);
#endif

HoloLens용 UI 만들기



Let's Tweet in Unity는 OnGUI로 UI가 만들어졌지만 HoloLens는 OnGUI가 작동하지 않기 때문에 uGUI로 다시 바꿉니다.

여기서 문제가되는 것은 HoloLens에서 문자를 입력하는 방법입니다. 이번에는
HoloToolKit-Examples > Input > Scenes > KeyboardTest
를 복제하여 UI 객체를 더하는 형태로 조정했습니다.
이제 가상 키보드와 음성 인식을 사용한 문자 입력이 가능합니다.



그런 다음 Demo.cs를 다음과 같이 다시 작성합니다.
uGUI에서 수행하는 이벤트 처리를 다른 함수로 내보내고 있습니다.

Scene 설정



빈 GameObject를 만들고 Demo.cs를 연결합니다.


  • CONSUMER_KEY/CONSUMER_SECRET

  • htps : // 아 ps. 라고 r. 코m/ 에서 얻은 값

  • Message/PIN Field/Tweet Field
  • 각각 만든 UI 파트 할당


  • uGUI 버튼의 이벤트 설정


  • Get PIN 버튼 이벤트
  • public void onClick_GetRequestToken()

  • Enter PIN 버튼 이벤트
  • public void onClick_EnterPIN()

  • Tweet 버튼 이벤트
  • public void onClick_PostTweet()




  • 컴파일 및 실행



    이제 실행하면 "Get PIN"을 AirTap 할 때 다른 창에서 Edge가 시작됩니다. 그래서 Twitter에 로그인하면 PIN이 표시되므로 다시 만든 앱으로 전환하고 InputField에 입력하고 "Enter PIN"을 AirTap합니다. 인증이 성공하면 Message 곳에 계정 이름이 들어가므로 "Tweet"버튼으로 게시할 수 있습니다.

    Edge로 전환해 버리는 것은 이용자로부터 보면 번잡한 플로우이므로, 인앱 브라우저의 등장이 기다리는 곳이군요.

    좋은 웹페이지 즐겨찾기