这一周的开发的邀请分成系统,差很少也完善到了70%的成度,正式上了线,投入了给用户使用,虽然还有一部分未完善进来,但仍是作一次简单的复盘,从技术和用户体验上提及。小程序
为何要作邀请?,还不是为了拉新、留存这两兄弟,前者能够为咱们的产品引入更多的新用户,灌入更多的活水,产生更多的优质内容(...目前内容这一块暂时被砍掉了),实现更高的business value,后者能够驱动产品内核增加,改善产品体验,提升DAU指标,实现正向增加的价值。微信小程序
同时引入分成机制,就是为了更好的激励老用户,经过我的渠道去拉取更多新用户进来,利用分成机制来让本身躺着也能够赚钱。微信
基于邀请的设计有不少种方案,邀请H5邀请连接、微信分享小程序注册、邀请码机制,以前的两种方案咱们都尝试过了,可是转化效果最终不太理想,最终咱们尝试了邀请码机制,此邀请码非彼邀请码,咱们采起了淘口令相似的机制,新用户经过复制老用户的邀请码,便可完成自动绑定。整个效果图以下:ide
相比以前H5邀请连接更有效的缩短了转化路径,新用户复制邀请码即可直接与老用户创建师徒关系。ui
明白了需求流程,开始从技术着手设计.this
因为是邀请口令机制,因此新用户必定是已经在APP中存在用户身份了,咱们只须要设计一张表,来创建邀请人与被邀请人的关系,先创建一张Invitations表.编码
Schema::create('invitations', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedInteger('user_id')->index()->comment('邀请人用户ID'); $table->unsignedInteger('be_inviter_id')->index()->comment('被邀请人ID'); $table->timestamp('invited_in')->nullable()->comment('验证成功后邀请时间'); $table->timestamps(); });
邀请关系表创建完成后,就须要给每位用户分配一个邀请码(惟一标识),能够生成uuid的方式生成一个惟一的邀请码,也能够直接根据用户的身份ID来推算出一个邀请码,最简单的方式就是利用base64来生成一个,编码和解码都比较快,并且不占用实体储存空间。spa
public static function encode($id) { return base64_encode($id); } public static function decode($code) { return base64_decode($code); }
邀请码生成后,便须要提供一个接口给客户端进行调用解码验证的逻辑,整个逻辑就使用伪代码来实现.设计
$inviterCode = $request->get('inviter_code); //验证邀请码合法 && 抛出异常提示 $this->invidatedInviterCode($inviterCode); //解码 $inviterId = Invitation::decode($inviterCode); //验证用户真实性... //绑定邀请... //触发相应奖励
这样,口令邀请系统就实现完了,下面开始来完善分成。code
整个分成的处理流程以下:
当用户触发各类操做行为的时候,如浏览视频、打卡、点赞就会经过一个钩子来触发分成逻辑,这个触发就是要在每一个操做被建立后触发,咱们能够经过观察者模式或者监听器来实现,在Laravel项目咱们使用的是观察者模式,整个伪代码逻辑以下。
public function created(Video $video) { $inviter = $user->myInviter; if(!is_null($inviter)){ $inviterWallet = $inviter->wallet; //计算视频收益 $reward = $this->computeReawrd($video); //发放奖励 inviterWallet->makeIncome($reward,'视频浏览分成'); } }
最后就实现了咱们邀请分成逻辑的编写,固然面对实际状况中,还存在更多更复杂的处理流程,可是基本思路以下,包括更多的二三级邀请奖励业务逻辑也是如此。
相对以前的h5连接和微信小程序都属于跳出的方式,在这个过程当中颇有可能没法进行直接转化,并且能够从容应对风险机制,尤为是微信、QQ的封锁,连接被封杀概率很大没法跳转,而文本内容能够经过服务端随时更换,你们只需复制打开APP便可完成绑定,操做性也比网页上填写手机号码要方便不少。
虽然基本的开发工做完成的差很少了,可是还有一些未完善下去,以下:
在邀请这个功能上,若是限制太多,就会下降用户参与积极性,若是限制过少,则容易产生漏洞,在这中间仍是得去产生一个平衡,至于把控到什么程度,还须要往后进一步的继续探知。