当前位置:

怎么在直播软件源码开发邀请奖励功能的

访客 2024-04-24 1372 0

邀请奖励功能是直播软件源码中非常常见的功能之一,通过用户自身的社交关系网,为平台实现推广引流作用,今天就来讲讲,邀请功能的实现方式,最终效果图如下图所示:

一、直播软件源码中邀请功能的实现机制
用户在个人中心点击邀请奖励功能,打开功能页面,页面将展示用户的邀请码,点击复制按钮,可以把邀请码复制到剪贴板上发送给别人,也可点击右上角的分享按钮,弹窗分享弹窗,选择分享的渠道,将用户的名片分享在其他社交app中。

名片上有该用户邀请码和二维码。新用户方扫描二维码会打开app的下载链接,下载并注册登录app后会成为该用户的下级。新用户也可以在app首页的邀请码弹窗中手动输入对方的邀请码并成为对方的下级。

二、实现直播软件源码邀请功能的代码如下

publicclassThreeDistributActivityextendsAbsActivityimplementsView.OnClickListener,LiveShareDialogFragment.ActionListener{privateProgressBarmProgressBar;privateWebViewmWebView;privatefinalintCHOOSE=100;//Android5.0以下的privatefinalintCHOOSE_ANDROID_5=200;//Android5.0以上的privateValueCallback<Uri>mValueCallback;privateValueCallback<Uri[]>mValueCallback2;privateTextViewmInviteCode;//邀请码privateViewmContainer;privateImageViewmQrCode;//二维码privateFilemShareImageFile;//分享图片文件privateMobShareUtilmMobShareUtil;@OverrideprotectedintgetLayoutId(){returnR.layout.activity_three_distribut;}@Overrideprotectedvoidmain(){Intentintent=getIntent();setTitle(intent.getStringExtra(Constants.TIP));mContainer=findViewById(R.id.share_container);ImageViewmAppIcon=findViewById(R.id.app_icon);TextViewmAppName=findViewById(R.id.app_name);CommonAppConfigappConfig=CommonAppConfig.getInstance();mAppIcon.setImageResource(appConfig.getAppIconRes());mAppName.setText(appConfig.getAppName());ImageViewavatar=findViewById(R.id.avatar);TextViewname=findViewById(R.id.name);TextViewidVal=findViewById(R.id.id_val);mInviteCode=findViewById(R.id.invite_code);mQrCode=findViewById(R.id.qr_code);findViewById(R.id.btn_share).setOnClickListener(this);UserBeanu=appConfig.getUserBean();if(u!=null){ImgLoader.displayAvatar(mContext,u.getAvatar(),avatar);name.setText(u.getUserNiceName());idVal.setText(StringUtil.contact("ID:",u.getId()));}Stringurl=intent.getStringExtra(Constants.URL);L.e("H5--->"url);LinearLayoutcontainer=(LinearLayout)findViewById(R.id.container);mProgressBar=(ProgressBar)findViewById(R.id.progressbar);mWebView=newWebView(mContext);LinearLayout.LayoutParamsparams=newLinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);params.topMargin=DpUtil.dp2px(1);mWebView.setLayoutParams(params);mWebView.setOverScrollMode(View.OVER_SCROLL_NEVER);container.addView(mWebView);mWebView.setWebViewClient(newWebViewClient(){@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){L.e("H5-------->"url);if(url.startsWith(Constants.COPY_PREFIX)){Stringcontent=url.substring(Constants.COPY_PREFIX.length());if(!TextUtils.isEmpty(content)){copy(content);}}else{view.loadUrl(url);}returntrue;}@OverridepublicvoidonPageFinished(WebViewview,Stringurl){setTitle(view.getTitle());}});mWebView.setWebChromeClient(newWebChromeClient(){@OverridepublicvoidonProgressChanged(WebViewview,intnewProgress){if(newProgress==100){mProgressBar.setVisibility(View.GONE);}else{mProgressBar.setProgress(newProgress);}}//以下是在各个Android版本的直播源码中,WebView调用文件选择器的方法//ForAndroid<3.0publicvoidopenFileChooser(ValueCallback<Uri>valueCallback){openImageChooserActivity(valueCallback);}//ForAndroid>=3.0publicvoidopenFileChooser(ValueCallbackvalueCallback,StringacceptType){openImageChooserActivity(valueCallback);}//ForAndroid>=4.1publicvoidopenFileChooser(ValueCallback<Uri>valueCallback,StringacceptType,Stringcapture){openImageChooserActivity(valueCallback);}//ForAndroid>=5.0@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)@OverridepublicbooleanonShowFileChooser(WebViewwebView,ValueCallback<Uri[]>filePathCallback,FileChooserParamsfileChooserParams){mValueCallback2=filePathCallback;Intentintent=fileChooserParams.createIntent();startActivityForResult(intent,CHOOSE_ANDROID_5);returntrue;}});mWebView.getSettings().setJavaScriptEnabled(true);if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}mWebView.loadUrl(url);MainHttpUtil.getQrCode(newHttpCallback(){@OverridepublicvoidonSuccess(intcode,Stringmsg,String[]info){if(code==0&&info.length>0){JSONObjectobj=JSON.parseObject(info[0]);if(mInviteCode!=null){mInviteCode.setText(obj.getString("code"));}if(mQrCode!=null){ImgLoader.display(mContext,obj.getString("qr"),mQrCode);}}}});}privatevoidopenImageChooserActivity(ValueCallback<Uri>valueCallback){mValueCallback=valueCallback;Intentintent=newIntent();if(Build.VERSION.SDK_INT<19){intent.setAction(Intent.ACTION_GET_CONTENT);}else{intent.setAction(Intent.ACTION_PICK);intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);}intent.setType("image/*");startActivityForResult(Intent.createChooser(intent,WordUtil.getString(com.yunbao.common.R.string.choose_flie)),CHOOSE);}@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){super.onActivityResult(requestCode,resultCode,intent);switch(requestCode){caseCHOOSE://5.0以下选择图片后的回调processResult(resultCode,intent);break;caseCHOOSE_ANDROID_5://5.0以上选择图片后的回调processResultAndroid5(resultCode,intent);break;}}privatevoidprocessResult(intresultCode,Intentintent){if(mValueCallback==null){return;}if(resultCode==RESULT_OK&&intent!=null){Uriresult=intent.getData();mValueCallback.onReceiveValue(result);}else{mValueCallback.onReceiveValue(null);}mValueCallback=null;}@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)privatevoidprocessResultAndroid5(intresultCode,Intentintent){if(mValueCallback2==null){return;}if(resultCode==RESULT_OK&&intent!=null){mValueCallback2.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode,intent));}else{mValueCallback2.onReceiveValue(null);}mValueCallback2=null;}protectedbooleancanGoBack(){returnmWebView!=null&&mWebView.canGoBack();}@OverridepublicvoidonBackPressed(){if(isNeedExitActivity()){finish();}else{if(canGoBack()){mWebView.goBack();}else{finish();}}}privatebooleanisNeedExitActivity(){if(mWebView!=null){Stringurl=mWebView.getUrl();if(!TextUtils.isEmpty(url)){returnurl.contains("g=Appapi&m=Auth&a=success")//身份认证成功页面||url.contains("g=Appapi&m=Family&a=home");//家族申请提交成功页面}}returnfalse;}publicstaticvoidforward(Contextcontext,Stringtitle,Stringurl){url=StringUtil.contact(url,"&uid=",CommonAppConfig.getInstance().getUid(),"&token=",CommonAppConfig.getInstance().getToken());Intentintent=newIntent(context,ThreeDistributActivity.class);intent.putExtra(Constants.URL,url);intent.putExtra(Constants.TIP,title);context.startActivity(intent);}@OverrideprotectedvoidonDestroy(){MainHttpUtil.cancel(MainHttpConsts.GET_QR_CODE);if(mWebView!=null){ViewGroupparent=(ViewGroup)mWebView.getParent();if(parent!=null){parent.removeView(mWebView);}mWebView.destroy();}super.onDestroy();}/***复制到剪贴板*/privatevoidcopy(Stringcontent){ClipboardManagercm=(ClipboardManager)getSystemService(CLIPBOARD_SERVICE);ClipDataclipData=ClipData.newPlainText("text",content);cm.setPrimaryClip(clipData);ToastUtil.show(R.string.copy_success);}/***生成分享图片*/privatevoidsaveBitmapFile(){PermissionUtil.request(this,newPermissionCallback(){@OverridepublicvoidonAllGranted(){if(mContainer==null){return;}mContainer.setDrawingCacheEnabled(true);Bitmapbitmap=mContainer.getDrawingCache();bitmap=Bitmap.createBitmap(bitmap);mContainer.setDrawingCacheEnabled(false);Filedir=newFile(CommonAppConfig.CAMERA_IMAGE_PATH);if(!dir.exists()){dir.mkdirs();}mShareImageFile=newFile(dir,Constants.SHARE_QR_CODE_FILE);booleanresult=BitmapUtil.getInstance().saveBitmap(bitmap,mShareImageFile);if(result){if(bitmap!=null&&!bitmap.isRecycled()){bitmap.recycle();}LiveShareDialogFragmentfragment=newLiveShareDialogFragment();fragment.setNoLink(true);fragment.setActionListener(ThreeDistributActivity.this);fragment.show(getSupportFragmentManager(),"LiveShareDialogFragment");}}},Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE);}@OverridepublicvoidonClick(Viewv){if(v.getId()==R.id.btn_share){saveBitmapFile();}}@OverridepublicvoidonItemClick(Stringtype){if(mShareImageFile==null){return;}if(mMobShareUtil==null){mMobShareUtil=newMobShareUtil();}mMobShareUtil.shareImage(mContext,type,mShareImageFile.getPath(),null);}}

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~