cocos creator iOS原生分享接入

今天接到一个任务,需要做接入iOS的分享功能,于是我就去找方法,还真的给我找到了一些方法,于是我先调了一个最简单的给老大看,老大说行,有微信分享就可以,于是动手就是开干!
这里用的系统原生 UIActivityViewController分享,非常的简单,只需要调用一个接口,就可以打开分享界面,而且还支持多平台分享,一般是可以标题、图片还有链接,不过微信分享不支持图片和链接同时分享,具体情况可以查看这篇文章iOS 社会化分享方案总结,先看看图示:

cocos creator iOS原生分享接入_第1张图片
分享界面-不要在意应用

说一下思路,因为这个是iOS源生分享,所以这个必然是要creator里js调用xCode的oc代码,详情可以看一下这里 js与oc互相调用。然后oc那边代码也要先写好(者先确定好写在哪里),因为js调用oc需要确定调用代码所在类的名称以及自己的名称,参数。
下面就上代码吧!
我先把js调用oc的代码写好:

if (cc.sys.isNative&&cc.sys.os==cc.sys.OS_IOS) {//判断是否是源生平台并且是否是iOS平台
    //调用APPController类中的Share方法,并且传递参数
    jsb.reflection.callStaticMethod("AppController","Share:title:","title","message");
}

js这边就这样写好啦,接下来把项目打包成xCode项目,在xCode项目中的AppController.h中写入静态方法:

#import 
@class RootViewController;
@interface AppController : NSObject 
{
}
+(BOOL)Share:(NSString *)str title:(NSString *)tit;
@property(nonatomic, readonly) RootViewController* viewController;
@end

在AppController.mm中实现:

+(NSString *)Share:(NSString *)str title:(NSString *)tit{
    NSString *textToShare = str; 
    NSURL *urlToShare = tit;
    //分享图片的话就可以加上下面两句,记得补充参数
    //UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; 
    //NSArray *activityItems = @[textToShare, imageToShare, urlToShare];
    NSArray *activityItems = @[textToShare, imageToShare, urlToShare];
    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
    //这里可能有个坑,下面说
    [self presentViewController:activityVC animated:YES completion:nil];
}

好啦,这样就应该走通啦!诶那个坑好像有条黄线!什么,居然没有presentViewController这个方法,这个博客是骗人的吧!于是我走遍各大博客,发现都是这样写的,到底是为什么没有用呢?难道这个AppController是个假的!我要去cocos creator找人理论去!于是就果然就找到了一个大佬用这个方法(评论很长,请使用ctrl+f查找):

cocos creator iOS原生分享接入_第2张图片
大佬的使用方式

哦~原来是这样,那我也把我的self改一下:

    //解决了这个坑!
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:activityVC animated:YES completion:nil];

运行之后,大功告成,可以开心正常的分享啦~
诶,等等,老大说这些东西挡住了我微信分享,我不想要前面的那些,而且还有分享的状态我也不知道呀!行吧,我们那接着写,这里有些不想要的平台,也可以删除,分享状态,也可以通过回调判断,那我就放上最终代码啦:

+(NSString *)Share:(NSString *)str title:(NSString *)tit{
    NSString *textToShare = str; 
    NSURL *urlToShare = tit;
    //分享图片的话就可以加上下面两句,记得补充参数
    //UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; 
    //NSArray *activityItems = @[textToShare, imageToShare, urlToShare];
    NSArray *activityItems = @[textToShare, imageToShare, urlToShare];
    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];
    //不显示的放在这里 
    activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
     //解决了这个坑!
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:activityVC animated:YES completion:nil];
     // 分享之后的回调
    activityVC.completionWithItemsHandler = ^(UIActivityType  _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
        if (completed) {
            //分享成功
            NSLog(@"成功啦~");
        } else  {
            //分享取消
            NSLog(@"失败惹...");
        }
    };

很开心,不过还是不知道那个坑的原理,可能cocoscreator对这个AppController做了手脚吧,所以只能通过应用获取到当前的Controller,这里只是猜测,原理不知道,先卸下来。
如果有大佬知道,可以指教一下~

你可能感兴趣的:(cocos creator iOS原生分享接入)