Android 接入场景
临境直播观看 SDK 的接入可以通过两种场景;
一、原生场景:直接从 App 原生进入直播观看;
二、H5 嵌入场景:从嵌套在 webview 的 H5 中,进入直播观看;
原生场景
原生场景接入方式
- 首先接入临境直播观看 SDK,并配置相应环境,具体请参见 Android 接入说明文档。
- 直接在需要跳转的 Activity 里面添加如下代码:
//设置跳转到临境直播时对应的参数LivePullIntentDataOptions options = new LivePullIntentDataOptions();options.setLiveRoomCode("");//设置直播室roomCodeoptions.setLivePlayPwd("");//设置直播观看密码options.setUserId("");//设置用户userIdoptions.setUserAvatar("");//设置用户头像urloptions.setUserName("");//设置用户名options.setUserLoginName("");//可选: 设置用户登录名options.setUserPoint(0);//设置用户积分//跳转到相应临境直播播放页面,context为Activity的实例LivePullManager.intentToLjLive(context, options);
H5嵌入场景
H5嵌入场景接入方式
- 首先接入临境直播观看 SDK,并配置相应环境,具体请参见 Android 接入说明文档。
- 在app的webview中添加云学堂直播协议代理回调;
package com.yxt.demo.liveyxtsdk;import android.net.Uri;import android.os.Build;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import android.util.Log;import android.webkit.CookieManager;import android.webkit.GeolocationPermissions;import android.webkit.JsPromptResult;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Toast;import com.yxt.sdk.live.pull.LivePullIntentDataOptions;import com.yxt.sdk.live.pull.LivePullManager;import org.json.JSONObject;import java.util.Objects;public class MainWebViewActivity extends AppCompatActivity {protected WebView yxt_webview;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main_web_test);yxt_webview = findViewById(R.id.yxt_webview);//webview基本属性设置yxt_webview.getSettings().setJavaScriptEnabled(true);yxt_webview.getSettings().setDefaultTextEncodingName("utf-8");yxt_webview.getSettings().setGeolocationEnabled(true);yxt_webview.getSettings().setLoadWithOverviewMode(true);//设置webView自适应屏幕大小yxt_webview.getSettings().setSupportMultipleWindows(true);yxt_webview.getSettings().setAppCacheEnabled(true);//设置H5的缓存打开,默认关闭yxt_webview.getSettings().setDomStorageEnabled(true);yxt_webview.getSettings().setLoadsImagesAutomatically(true);yxt_webview.getSettings().setAllowFileAccess(true);yxt_webview.getSettings().setAllowFileAccessFromFileURLs(true);yxt_webview.getSettings().setPluginState(WebSettings.PluginState.ON);// 可以使用插件yxt_webview.getSettings().setSupportMultipleWindows(true);if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {CookieManager.getInstance().setAcceptThirdPartyCookies(yxt_webview, true);}//添加云学堂直播的 user agentyxt_webview.getSettings().setUserAgentString(yxt_webview.getSettings().getUserAgentString() + " XuanLiveThirdPlatform/0");yxt_webview.setWebChromeClient(new WebChromeClient() {@Overridepublic void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {callback.invoke(origin, true, false);super.onGeolocationPermissionsShowPrompt(origin, callback);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {url = message;Log.e("TAG", "onJsPrompt url: " + url);return process(view, url, result);}});yxt_webview.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}});}/*** YXT协议处理** @param webView* @param url* @param result* @return*/public boolean process(WebView webView, String url, JsPromptResult result) {if (!url.startsWith("http")) {if (result != null) {result.confirm();result.cancel();}if (url.startsWith("yxtthirdapp://")) {try {Uri uri = Uri.parse(url);String host = Objects.requireNonNull(uri.getHost()).toLowerCase();// 域名 空判断if (TextUtils.isEmpty(host)) {return false;}String param = uri.getQueryParameter("param");JSONObject jsonObject = new JSONObject(param);String name = jsonObject.optString("name", "");if ("yxt_app_live_open".equals(name)) {String roomcode = jsonObject.optString("roomid", "");String password = jsonObject.optString("password", "");LivePullIntentDataOptions options = new LivePullIntentDataOptions();options.setLivePlayPwd(password);options.setLiveRoomCode(roomcode);//传入真实用户身份 此处是测试写死的options.setUserId("5ff44dff-82b5-4dd1-8a0a-c4c6a0a70733");options.setUserName("王阳明");options.setUserAvatar("https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoKnUXeQnOQicPKWM8JHWH704OmhM3FRbq5icT5mhykg2NVL7epHuWIOmIDMBTCia5LiaTFmVL6Y9659Q/132");LivePullManager.intentToLjLive(this, options);}} catch (Exception e) {e.printStackTrace();}return true;}}return false;}@Overridepublic void onBackPressed() {if (yxt_webview.canGoBack()) {yxt_webview.goBack();} else {super.onBackPressed();}}}
- 当获取到协议之后需要获取用户可用积分;
// 正式api地址public static final String DEFAULT_FORMAL_BASE_API = "https://api-qida.yunxuetang.cn/v1/qdl/";// 测试api地址public static final String DEFAULT_TEST_BASE_API = "https://devinner.yunxuetang.com.cn/qidaliveapi/v1/";/*** 此API用于获取用户可用积分*/public static final String GETVALIDPOINTS = API地址 + "live/getvalidpoints";public static void openLive(final Context mContext, final String roomId, final String playPwd) {Alert.getInstance().showDialog();//此处是显示等待的loading效果 需自己实现//此处为通过JavaAPI获取当前用户的可用积分,用于观看直播时对主播进行礼物赠送是的兑换//HttpUtil需要自己实现 此处就是简单的get请求//注意该请求头中需要携带以下参数//1."Source" "506"//2."Token" token从h5的localstorage获取HttpUtil.get(GETVALIDPOINTS, new JsonHttpHandler() {@Overridepublic void onSuccessJSONObject(int statusCode, JSONObject response) {super.onSuccessJSONObject(statusCode, response);//此处是获取到后台返回的积分是个jsonobject 此处需要在自己的http框架中解析得//此处跳转直播//设置跳转到临境直播时对应的参数LivePullIntentDataOptions options = new LivePullIntentDataOptions();options.setLivePlayPwd(playPwd);//设置直播观看密码options.setLiveRoomCode(roomId);//设置直播室roomCodeoptions.setUserAvatar("");//设置用户头像urloptions.setUserId("");//设置用户userIdoptions.setUserLoginName("");//设置用户登录名options.setUserPoint(response.optInt("validPoints", 0));//设置用户积分//跳转到相应临境直播播放页面,context为Activity的实例LivePullManager.intentToLjLive(context, options);}@Overridepublic void onFailure(int statusCode, String responseString) {super.onFailure(statusCode, responseString);//获取失败,此处跳转直播积分为0LivePullIntentDataOptions options = new LivePullIntentDataOptions();options.setLivePlayPwd(playPwd);//设置直播观看密码options.setLiveRoomCode(roomId);//设置直播室roomCodeoptions.setUserAvatar("");//设置用户头像urloptions.setUserId("");//设置用户userIdoptions.setUserLoginName("");//设置用户登录名options.setUserPoint(0);//设置用户积分}@Overridepublic void onFinish() {super.onFinish();Alert.getInstance().hideDialog();//此处是隐藏等待的loading效果 需自己实现}});}
关于作者
江苏云学堂网络科技有限公司开发人员,如有问题请发送邮件至
lingy@yxt.com
cuiqq@yxt.com。