iOS native sharing script
Can anyone tell me how I can change this script so that when the button is clicked I can share it via iOS sharing options by pulling an image from the streamingassets folder?
Currently the button is programmed to take a screenshot and then share. I don't want this. I have an image already in the streaming assests folder that I'd like to share instead. How can this be done?
P.S. I have no coding experience at all so please go easy. cheers
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
/*
* https://github.com/ChrisMaire/unity-native-sharing
*/
public class NativeShare : MonoBehaviour {
public string ScreenshotName = "screenshot.png";
public void ShareScreenshotWithText(string text)
{
string screenShotPath = Application.persistentDataPath + "/" + ScreenshotName;
Application.CaptureScreenshot(ScreenshotName);
Share(text,screenShotPath,"");
}
public void Share(string shareText, string imagePath, string url, string subject = "")
{
#if UNITY_ANDROID
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);
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);
#elif UNITY_IOS
CallSocialShareAdvanced(shareText, subject, url, imagePath);
#else
Debug.Log("No sharing set up for this platform.");
#endif
}
#if UNITY_IOS
public struct ConfigStruct
{
public string title;
public string message;
}
[DllImport ("__Internal")] private static extern void showAlertMessage(ref ConfigStruct conf);
public struct SocialSharingStruct
{
public string text;
public string url;
public string image;
public string subject;
}
[DllImport ("__Internal")] private static extern void showSocialSharing(ref SocialSharingStruct conf);
public static void CallSocialShare(string title, string message)
{
ConfigStruct conf = new ConfigStruct();
conf.title = title;
conf.message = message;
showAlertMessage(ref conf);
}
public static void CallSocialShareAdvanced(string defaultTxt, string subject, string url, string img)
{
SocialSharingStruct conf = new SocialSharingStruct();
conf.text = defaultTxt;
conf.url = url;
conf.image = img;
conf.subject = subject;
showSocialSharing(ref conf);
}
#endif
}
Check our plugin Cross Platform Native Plugins - Lite version. It has Sharing feature and many more. Tutorial on usage.
Answer by bombsquare · Apr 26, 2016 at 10:50 AM
Here is sample code to be put in ShareScreenshotWithText
method:
string path = System.IO.Path.Combine(Application.streamingAssetsPath, "sharing_picture.png"); Share(text,path,"");
Where sharing_picture.png
is a file in StreamingAssets
folder.
Your answer
Follow this Question
Related Questions
When I publish my iOS/Android app, a transparent game object overlaps other 2D game objects 1 Answer
Share to facebook, twitter,etc. Ios Please help out 0 Answers
UI Buttons Trigger displaced after build. Help Please 0 Answers
Unity UI OnClick AddListener 1 Answer
Cannot convert `float' expression to type `byte'. Simple Code 0 Answers