寫在前面
最近接了很多SDK,大多都是搬磚的事,也沒有太多事。今天剛剛把原生分享寫了。還是不太習(xí)慣寫ios的代碼,奇奇怪怪的。原理啥的其實(shí)也很簡(jiǎn)單,分別說(shuō)說(shuō)唄。

安卓
安卓分享分為兩大類:文字、文件。這里面并沒有鏈接圖文啥的,像微信分享圖文鏈接。猜測(cè)微信那種圖文分享應(yīng)該是微信這個(gè)用原生分享出去的特殊格式的文字與文件再生成的。也有可能有,但是我沒找到。
分享的代碼很簡(jiǎn)單,如下:
//分享純文字
public void ShareText(String content) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, content);
Intent chooserIntent = Intent.createChooser(intent, "share to:");
this.activity.startActivity(chooserIntent);
}
這里推薦看看安卓官網(wǎng)文檔寫的很是詳細(xì)。分享文件的話就是把setType換一個(gè)即可。簡(jiǎn)單說(shuō)就是分享文件就是把文件轉(zhuǎn)換成二進(jìn)制流傳輸。
有哪些可以分享的文件類型我們可以選擇如何編寫,推薦看看這一篇文章很是詳細(xì)。
還有我們可以篩選平臺(tái),分享到指定平臺(tái)。可以看看這一篇文章。這個(gè)功能我并沒有做,他說(shuō)的非常的詳細(xì)。
這里我在做分享圖片的時(shí)候,遇到一個(gè)問(wèn)題就是我們把圖片放在unity工程中StreamingAssets目錄下。這個(gè)就算是放在沙盒文件下了吧。但是打包到安卓下他其實(shí)并沒有在安卓的沙盒文件下,解壓apk,圖片的確是沒有被壓縮。但是你用www訪問(wèn)也是沒有的。我這里還是重新生成的圖片才會(huì)到沙盒路徑。
如果我們不想重新生成圖片的話,有個(gè)解決方案:我們可以把圖片讀出文件的bytes然后再把bytes轉(zhuǎn)成64位字符串。這樣把這個(gè)字符串存起來(lái)然后用的時(shí)候再把它轉(zhuǎn)回去即可。
參考資料:
https://developer.android.com/training/sharing/
http://www.itdecent.cn/p/88f166dd43b7
https://blog.csdn.net/wjr1949/article/details/71024068
http://www.itdecent.cn/p/1d4bd2c5ef69
蘋果
蘋果可以分享鏈接、文件,不得不吐槽,確實(shí)不太會(huì)寫ios,感覺很麻煩。雖然我們不需要想安卓那樣導(dǎo)jar包。

代碼看起很奇怪,其實(shí)原理也很簡(jiǎn)單,就是調(diào)用api即可,把我需要分享的內(nèi)容壓進(jìn)去即可。代碼如下:
-(void) share: (NSString*) body withURL: (NSString*) urlString withImage:(NSString*) imageDataString withSubject: (NSString*) subject {
NSMutableArray *sharingItems = [NSMutableArray new];
NSArray *activityItems=
if (body && body.length > 0) {
[sharingItems addObject:body];
}
if (imageDataString && imageDataString.length > 0) {
NSData *imageData = [[NSData alloc] initWithBase64EncodedString:imageDataString options:0];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[sharingItems addImage:image];
}
if (urlString && urlString.length > 0) {
[sharingItems addURL:urlString];
}
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];
activityViewController.popoverPresentationController.sourceView = UnityGetGLViewController().view;
activityViewController.popoverPresentationController.sourceRect = CGRectMake(UnityGetGLViewController().view.frame.size.width/2, UnityGetGLViewController().view.frame.size.height/4, 0, 0);
if(subject && subject.length > 0)
{
[activityViewController setValue:subject forKey:@"subject"];
}
[UnityGetGLViewController() presentViewController:activityViewController animated:YES completion:nil];
}
每個(gè)平臺(tái)都會(huì)有一些小小的不同差異分享出去的東西,比如說(shuō)qq分享出去的圖文鏈接,它會(huì)根據(jù)你的網(wǎng)頁(yè)重新加載你的圖文簡(jiǎn)介與圖片。
當(dāng)然ios也是可以篩選平臺(tái)指定分享,可以看看這篇文章。
記得加MessageUI的庫(kù)。
參考資料:
http://www.itdecent.cn/p/c2fb41c5c14e
https://blog.csdn.net/qq_28009573/article/details/77744001
http://www.itdecent.cn/p/a6b288093b29
https://blog.csdn.net/FlyingKuiKui/article/details/77650289
小結(jié)
說(shuō)的也不多,大多都是讓大家去看別人寫的東西,畢竟我做著兩個(gè)也是個(gè)半吊子,基本不太懂,都是搬磚。萬(wàn)一給大家傳播了錯(cuò)誤的思想就不好了。下面是下載鏈接,推薦下載unity package,如果你想看看安卓工程可以看看GitHub。
github
unity package