iOS开发iOS Collection设计产品运营商业模式

谈谈分享邀请奖励机制(附iOS实现代码)

2017-03-14  本文已影响3576人  si1ence

以后不做标题党了,感觉现在越来越多的技术文章题目屌炸天,内容空泛没有干货,甚至好多把官方文档摘过来,还摘得不全,简直是垃圾。虽然我现在写不出牛逼的文章,但是我最起码不会去做我反对的那种人。

就像这样

一、先说点没用的

那么为什么口碑经济是最好的传播形式呢?从用户的两方面需求来分析:

二、怎样才能最大限度上激发用户自主进行分享

除了练习内功(自身产品优秀)之外,一些花把势(适当的奖励机制)也可以在一定限度上激发用户进行分享,先举几个别的行业的例子来说明问题:

这个激励措施是一定要基于产品好的基础上,就好比:你的女神已经对你有好感了,你卖个萌,她就答应做你女朋友了;如果妹子对你没有好感,“卖萌”只会让对方觉得丑人多作怪

二、产品角度

1、奖励有哪些主要形式?
2、该功能主要界面
3、产品必须要了解的技术

三、技术实现思路

1、linkedMe主要方法
// 因为涉及到若干个分享平台,因此封装一个生成短链接的方法
// 生成短链接后,进行相应的操作,因此
- (void)createShotrUrlWithChannel:(NSString *)channel Success:(void (^)())block_success
                          failure:(void (^)())block_failure {
    LMUniversalObject *LMObj = [[LMUniversalObject alloc] initWithCanonicalIdentifier:@"item/12345"];
    LMObj.title = @"";//标题
    LMObj.canonicalUrl = @"http://";
    LMObj.contentDescription = @"plapla推荐活动";
    LMObj.imageUrl = @"http://yourActivityImageUrl";
    
#warning 注意,这里添加参数的方式有两种,一定和要和安卓添加的方式统一,因为涉及到两个平台的分享下载
    // 添加参数方式一
//    [LMObj addMetadataKey:@"linkedMe_appid" value:@"appidNum"];
//    [LMObj addMetadataKey:@"linkedMe_udid" value:@"user_udid"];
//    [LMObj addMetadataKey:@"platform" value:channel];
//    
    NSString *dateDescription = [[NSDate date] description];
//    [LMObj addMetadataKey:@"linkedMe_time" value:dateDescription];
//    [LMObj addMetadataKey:@"linkedMe_user" value:validId];
    
    self.linkedUniversalObject = LMObj;
    
    LMLinkProperties *linkProperties = [[LMLinkProperties alloc] init];
    linkProperties.channel = channel;//渠道(微信,微博,QQ,等...)
    linkProperties.feature = @"Share";//表示深度链接的特点,例如邀请,分享等等;
    linkProperties.tags=@[@"LinkedME", @"Demo"];//表示深度链接的标签特性,自定义任何值;
    linkProperties.stage = @"Live";//表示深度链接的阶段特性,比如第一版产品发布,第二版本测试等等;
    linkProperties.source = @"iOS";
    
    // 添加参数方式二
    [linkProperties addControlParam:@"linkedMe_appid" withValue:AppID];//Demo标识
    [linkProperties addControlParam:@"linkedMe_udid" withValue:UDID];
    [linkProperties addControlParam:@"platform" withValue:channel];
    [linkProperties addControlParam:@"linkedMe_time" withValue:dateDescription];
    [linkProperties addControlParam:@"linkedMe_user" withValue:validId];
    [linkProperties setAndroidPathControlParam:@"*"];
    [linkProperties setIOSKeyControlParam:@"*"];
    
    parmas = [NSString stringWithFormat:@"%@\n%@",[self.linkedUniversalObject description],[linkProperties description]];
    //开始请求短链
    [self.linkedUniversalObject getShortUrlWithLinkProperties:linkProperties andCallback:^(NSString *url, NSError *err) {
        if (url) {
            NSLog(@"[LinkedME Info] SDK creates the url is:%@", url);

            // h5中间页拼接短链接
            self.shortUrl = [NSString stringWithFormat:@"%@?download=%@", @"中间页的url", url];
            if (block_success) {
                block_success();
            }
        } else {
            if (block_failure) {
                block_failure();
            }
            self.shortUrl = H5_LIVE_URL;
        }
    }];
}
- (void)js2oc_recommend:(NSDictionary *)dict {
    NSString *platform = dict[@"linkedMePlatform"];
    // 定义block
    void (^recommendBlock)();
    
    if ([platform isEqualToString:@"wechat"]) { // 分享到微信
        recommendBlock = ^(){
            [self shareAppToWeChatSession];
        };
    } else if ([platform isEqualToString:@"moments"]) { // 分享到朋友圈
        recommendBlock = ^(){
            [self shareAppToWeChatTimeline];
        };
    } else if ([platform isEqualToString:@"weibo"]) { // 分享到微博
        recommendBlock = ^(){
            [self shareAppToSina];
        };
    } else if ([platform isEqualToString:@"qq"]) { // 分享到qq
        recommendBlock = ^(){
            [self shareAppToQQSession];
        };
    } else if ([platform isEqualToString:@"qzone"]) { // 分享到qzone
        recommendBlock = ^(){
            [self shareAppToQzone];
        };
    } else if ([platform isEqualToString:@"qrcode"]) { // 生成二维码
        recommendBlock = ^(){
            [self showQRImageWithString:self.shortUrl];
        };
    } else if ([platform isEqualToString:@"copy"]) { // 拷贝
        recommendBlock = ^(){
            // 这里是拷贝出来“广告语+短链接”,方便论坛等粘贴
            // 楼主在这里使用新浪的api 将中间页+linkedMe短链接 拼接而成的链接再次变短,对用户也友好一些,具体代码就不粘了
#warning 当然也可以使用 LInkedMe 官方推荐的js方法实现再次生成短链接
            UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
            pasteboard.string = [NSString stringWithFormat:@"活动文案啦啦啦  %@",  self.shortURL];
            [MBProgressHUD showSuccess:@"复制成功"];
        };
    }
    [self createShotrUrlWithChannel:platform Success:recommendBlock failure:^{
        [MBProgressHUD showMessage:@"分享失败,请检查网络"];
    }];
}

其中 LinkedMe 官方 SDK 会自动做一个缓存,比如用户触发深度链接后,第一次打开app没有连接网络,第二次打开时(有网络状态)依旧会生效

- (void)checkoutLinkedMeWithOptions:(NSDictionary *)launchOptions {
    //初始化及实例
    LinkedME* linkedme = [LinkedME getInstance];
    
    //打印日志
    //    [linkedme setDebug];
    
    //获取跳转参数
    [linkedme initSessionWithLaunchOptions:launchOptions automaticallyDisplayDeepLinkController:NO deepLinkHandler:^(NSDictionary* params, NSError* error) {
        if (!error) {
            //防止传递参数出错取不到数据,导致App崩溃这里一定要用try catch
            @try {
                NSLog(@"LinkedME finished init with params = %@",[params description]);
                //获取详情页类型(如新闻客户端,有图片类型,视频类型,文字类型等)
                //            NSString *title = [params objectForKey:@"$og_title"];
                NSString *tag = params[@"$control"][@"share_udid"];
                
                if (tag.length >0) {
                    // 接口一:向服务器上报信息,表示该用户已经下载app
                    [self reportLinkedMeInfoWithPara:params];
                }
            } @catch (NSException *exception) {
                NSLog(@"exception-->%@", exception);
            } @finally {
                
            }
        } else {
            NSLog(@"LinkedME failed init: %@", error);
        }
    }];
}
2、接口设计
3、iOS 10.3 关于keychain 特性的改动

这一改动,虽未经 苹果官方公布,但是已经在论坛的帖子里得到了 Apple 员工的确认,原文如下:This is an intentional change in iOS 10.3 to protect user privacy. Information that can identify a user should not be left on the device after the app that created it has been removed.
  It has never been a part of the API contract that keychain items created by an app would survive when the app is removed. This has always been an implementation detail.
  If a keychain item is shared with other apps, it won’t be deleted until those other apps have been deleted as well.

4、最后,下列坑已踩,后来者请直接绕过
上一篇 下一篇

猜你喜欢

热点阅读