@Staspost

Как в Unity добавить расшаривание в социальные сети?

Пытаюсь добавить в приложение возможность расшаривания в социальные сети (В контакте, Инстаграмм и т.д.) достижений игрока и скринов игры.
Все туториалы, которые я нашел, уже устарели. Я добавил следующий код:
using System.Collections;
using UnityEngine;

public class NativeShare : MonoBehaviour
{
    private string text = "Тестовый текст";
    public string ScreenshotName = "screenshot.png"; // "имя" скриншота
    public string url = "https://play.google.com/"; //url приложения (например на маркете)
    private string urlApp = "https://play.google.com";

    /// <summary>
    /// Метод для кнопки. 
    /// </summary>
    ///<param name="text">Текст которым делимся</param>
    public void ShareScreenshotWithText(string text)
    {
        ScreenCapture.CaptureScreenshot(ScreenshotName);
        StartCoroutine(DelayedShare(text, url));
    }

    /// <summary>
    /// Небольшая пауза для скриншота и вызов метода "Поделиться"
    /// </summary>
    /// <param name="text">Текст которым делимся</param>
    /// <param name="urlApp">Ссылка на приложение</param>
    /// <returns></returns>
    private IEnumerator DelayedShare(string text, string urlApp)
    {
        yield return new WaitForSeconds(0.25f);
        string screenShotPath = Application.persistentDataPath + "/" + ScreenshotName;
        Share(text, screenShotPath, urlApp);
    }

    //"Делимся"
    private void Share(string shareText, string imagePath, string url, string subject = "")
    {
        AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
        AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");

        intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));
        AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
        AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + imagePath);
        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
        intentObject.Call<AndroidJavaObject>("setType", "image/png");

        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), shareText + "\n" + url);

        AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");

        AndroidJavaObject jChooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, subject);
        currentActivity.Call("startActivity", jChooser);
    }
}

Он работает на Андроиде 5-й версии, но не работает на версии 8. Почитав о проблеме, я нашел, что начиная с 7-й версии Андроида этот код больше не работает.
Он выдает следующие ошибки:
5ec297fe995af779449477.png
В ассетах я ничего подходящего тоже не нашел: или есть отзывы, что код тоже не работает, или нет нужных соцсетей, шарят только в Твиттер и Фейсбук, а мне нужно ВК и Инстаграм.
Может, кто-нибудь знает, как заставить работать имеющийся код, или какой-нибудь точно работающий плагин?
  • Вопрос задан
  • 539 просмотров
Пригласить эксперта
Ответы на вопрос 2
mopsicus
@mopsicus
Можете попробовать мои плагины для iOS и Android: https://github.com/mopsicus/unity-share-plugin-ios...

Facebook
Twitter
Vkontakte
Odnoklassniki
WhatsApp
Viber
Telegram

Давно не обновлял, может что-то отвалилось уже, но исходники все есть, можно подкрутить и обновить
Ответ написан
@Staspost Автор вопроса
Нашел хороший туториал, сделал по нему, но проект не собирается, ругается на кастомный gradle, в конце сборки выдается сообщение:
"the attribute application@appComponentFactory=android.support.v4.app.CoreComponentFactory in androidx.core:core1.0.0 collides whith another value" .

Как я понимаю, идет конфликт между androidx и android.support.v4, они не поддерживаются одновременно.
Я пробовал заменить в вышеприведенном туториале строку "implementation 'com.android.support:appcompat-v7:28.0.0" на "implementation 'androidx.core.content.FileProvider'", но проект все равно не собирается, выдается ошибка
"Build completed with a result of 'Failed' UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)".

Также я нашел, что нужно добавить в папку Plugins файл
support-v4-24.1.1.aar

который можно взять в SDK (в приведенном примере он хранился по адресу: AndroidSDK\extras\android\m2repository\com\android\support\support-v4\24.1.1)
Но у меня в папке extras есть только папка intel, а файла support-v4-24.1.1.aar я вообще нигде не нашел, вероятно он сейчас не поставляется (SDK-24 я скачивал, в нем тоже нет).
Пример моего файла Gradle:
// Android Resolver Repos Start
([rootProject] + (rootProject.subprojects as List)).each {
    ext {
        it.setProperty("android.useAndroidX", true)
        it.setProperty("android.enableJetifier", true)
    }
}
([rootProject] + (rootProject.subprojects as List)).each { project ->
    project.repositories {
        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
        maven {
            url "https://maven.google.com"
        }
        maven {
            url (unityProjectPath + "/Assets/GeneratedLocalRepo/Firebase/m2repository") // Assets/Firebase/Editor/AnalyticsDependencies.xml:18, Assets/Firebase/Editor/AppDependencies.xml:20
        }
        maven {
            url (unityProjectPath + "/Assets/GeneratedLocalRepo/GooglePlayGames/Editor/m2repository") // Assets/GooglePlayGames/Editor/GooglePlayGamesPluginDependencies.xml:11
        }
        mavenLocal()
        jcenter()
        mavenCentral()
    }
}
// Android Resolver Repos End
apply plugin: 'com.android.library'
**APPLY_PLUGINS**

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
// Android Resolver Dependencies Start

    implementation 'com.google.firebase:firebase-analytics:17.3.0' // Assets/Firebase/Editor/AppDependencies.xml:15
    implementation 'com.google.firebase:firebase-analytics-unity:6.14.0' // Assets/Firebase/Editor/AnalyticsDependencies.xml:18
    implementation 'com.google.firebase:firebase-app-unity:6.14.0' // Assets/Firebase/Editor/AppDependencies.xml:20
    implementation 'com.google.firebase:firebase-common:19.3.0' // Assets/Firebase/Editor/AppDependencies.xml:13
    implementation 'com.google.games:gpgs-plugin-support:0.10.08' // Assets/GooglePlayGames/Editor/GooglePlayGamesPluginDependencies.xml:11
// Android Resolver Dependencies End
**DEPS**}

// Android Resolver Exclusions Start
android {
  packagingOptions {
      exclude ('/lib/armeabi/*' + '*')
      exclude ('/lib/mips/*' + '*')
      exclude ('/lib/mips64/*' + '*')
      exclude ('/lib/x86/*' + '*')
      exclude ('/lib/x86_64/*' + '*')
  }
}
// Android Resolver Exclusions End
android {
    compileSdkVersion **APIVERSION**
    buildToolsVersion '**BUILDTOOLS**'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    defaultConfig {
        minSdkVersion **MINSDKVERSION**
        targetSdkVersion **TARGETSDKVERSION**
        ndk {
            abiFilters **ABIFILTERS**
        }
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'
        consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
    }

    lintOptions {
        abortOnError false
    }

    aaptOptions {
        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~"
    }**PACKAGING_OPTIONS**
}**REPOSITORIES****SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:28.0.0'	
}

Как заставить его работать и где можно найти файл support-v4-24.1.1.aar?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы