트위터에서 게임 스쿠쇼를 공유하는 과정을 만들 때 빠진 이야기

6673 단어 트위터imgurUnity

전치


  • 트위터에서 스쿠 쇼를 공유하는 프로세스를 만들려고했습니다
  • 대응 빌드는 iOS/Android/WebGL 의 3개로 했다
  • 캡처 이미지 업로드 대상은 Imgur를 사용하기로 결정했습니다
  • 그래서 Imgur의 API를 사용하여 Unity에서 http 요청하고 업로드하기로 결정했습니다.
  • Unity는 2018.4.12f1
  • 크게 세 가지 문제에 부딪쳤다

  • 만들어 보았습니다.



    빠진 이야기



    카드 표시가 업로드한 이미지의 직접 URL이 표시되지 않음



    사건



    API 응답이 업로드 한 이미지의 직접 URL이므로 URL을 그대로 사용했지만 카드가 표시되지 않았습니다.


    response는 이런 느낌
    <?xml version="1.0" encoding="utf-8"?>
    <data type="array" success="1" status="200">
      <id>xxxxx</id><title/><description/><datetime>1574052543</datetime><type>image/png</type><animated>false</animated><width>1082</width><height>646</height><size>34163</size><views>0</views><bandwidth>0</bandwidth><vote/><favorite>false</favorite><nsfw/><section/><account_url/><account_id>0</account_id><is_ad>false</is_ad><in_most_viral>false</in_most_viral><has_sound>false</has_sound><tags/><ad_type>0</ad_type><ad_url/><edited>0</edited><in_gallery>false</in_gallery><deletehash>yyyyy</deletehash><name/>
      <link>https://i.imgur.com/xxxxx.png</link>
    </data>
    

    해결 방법



    응답으로 돌아온 업로드한 이미지의 직접 URL 확장자(위의 예라면 .png 그래서 확장자를 배제한 형태로 url 파라미터에 건네주도록 했다.

    ※이런 페이지


    ScreenCapture.CaptureScreenshot에서 Android 빌드에서 오류가 발생했습니다.



    사건


    ScreenCapture.CaptureScreenshot 는 보존 패스를 설정하면 그 패스에 보존할 수 있다고 하는 전제로 구현하고 있었다.
    Editor/WebGL 빌드에서는 확실히 문제 없었다.
    Android 빌드에서 실행한 순간 이런 느낌의 에러에. .
    11-15 21:10:56.490 12383 12401 I Unity   : capture_path = /storage/emulated/0/Android/data/com.Yasuragitei.UnityTweet/files/201911152110564885.png
    11-15 21:10:56.490 12383 12401 I Unity   :
    11-15 21:10:56.490 12383 12401 I Unity   : (Filename: ./Runtime/Export/Debug.bindings.h Line: 45)
    11-15 21:10:56.490 12383 12401 I Unity   :
    11-15 21:10:56.801 12383 12547 E Unity   : Failed to store screen shot (/storage/emulated/0/Android/data/com.Yasuragitei.UnityTweet/files/storage/emulated/0/Android/data/com.Yasuragitei.UnityTweet/files/201911152110564885.png)
    
    capture_path = xxx 는 자전에서 logging 했으므로, 패스 자체는 문제 없을 것 같아…Failed to store screen shot 뒤에 출력되는 경로가 뭔가 이상하다…

    해결 방법



    이런 느낌으로 모바일용은 파일명만 지정해 실행하도록 했다.
    string fileName = string.Format("{0:yyyyMMddHmmssFFFF}.{1}", DateTime.Now, cImageSuffix);
    string filePath = Application.persistentDataPath + "/" + fileName;
    
    // モバイルプラットフォームはファイル名指定で、勝手にpersistentDataPath配下となる
    #if !UNITY_EDITOR && (UNITY_ANDROID || UNITY_IOS)
    ScreenCapture.CaptureScreenshot(fileName);
    #else
    ScreenCapture.CaptureScreenshot(filePath);
    #endif
    

    제대로 문서를 읽자.



    공식 문서에는 제대로 쓰여졌습니다.
    ScreenCapture.CaptureScreenshot
    그래서 안심하고 Application.persistentDataPath 부하에 보존되는 전제로 처리를 쓸 수 있을 것.
    On mobile platforms the filename is appended to the persistent data path.
    See Application.persistentDataPath for more information.
    

    카드 표시 방법은 웹 버전과 트위터 클라이언트 버전과 다릅니다.



    사건



    제작으로 캡처 이미지 업로드 대상 URL과 게임 URL 두 가지를 공존하는 형태로 중얼거리고 싶었다.
    그러나, Web판은 url 파라미터로 지정한 URL을 card 표시해 줄 것 같고, Twitter 클라이언트측에서는 URL의 순서가 빠른 쪽이 card 표시 대상이 되어 버린다.

    즉,
    이런 일이지만


    이렇게되어 버렸다.


    해결 방법



    여기에서 해결할 수 있는 문제가 아닌 것 같았으므로, 파라미터를 지정해 주는 것으로 ImgurAPI를 text/url 지정(Web판용)으로 실행, 혹은 textのみ 지정(URL의 순서를 이미지 URL 우선으로 한다)로 실행할 수 있도록 조금 무리하게 처리했다.

    감상


  • 왜 플랫폼간에 동작이 다르다……
  • 곤란하면 공식 문서.
  • 단지 일본어 문서는 일부 잘 모르는 번역이 되었으므로 조금 위험.
  • 좋은 웹페이지 즐겨찾기