搜索
您的当前位置:首页正文

【Unity】手机系统原生分享(ios、Android)

来源:二三娱乐

写在前面

最近接了很多SDK,大多都是搬砖的事,也没有太多事。今天刚刚把原生分享写了。还是不太习惯写ios的代码,奇奇怪怪的。原理啥的其实也很简单,分别说说呗。


ios分享 Android分享

安卓

安卓分享分为两大类:文字文件。这里面并没有链接图文啥的,像微信分享图文链接。猜测微信那种图文分享应该是微信这个用原生分享出去的特殊格式的文字与文件再生成的。也有可能有,但是我没找到。
分享的代码很简单,如下:

//分享纯文字
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);
}

这里我在做分享图片的时候,遇到一个问题就是我们把图片放在unity工程中StreamingAssets目录下。这个就算是放在沙盒文件下了吧。但是打包到安卓下他其实并没有在安卓的沙盒文件下,解压apk,图片的确是没有被压缩。。我这里还是重新生成的图片才会到沙盒路径。

如果我们不想重新生成图片的话,有个解决方案:我们可以把图片读出文件的bytes然后再把bytes转成64位字符串。这样把这个字符串存起来然后用的时候再把它转回去即可。

苹果

苹果可以分享链接文件,不得不吐槽,确实不太会写ios,感觉很麻烦。虽然我们不需要想安卓那样导jar包。

微信分享链接

代码看起很奇怪,其实原理也很简单,就是调用api即可,把我需要分享的内容压进去即可。代码如下:

-(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];        
}

每个平台都会有一些小小的不同差异分享出去的东西,比如说qq分享出去的图文链接,它会根据你的网页重新加载你的图文简介与图片。

小结

Top