直播app开发分析,接入Mob三方登录分享
现在国内大部分直播app开发都集成了第三方登录和社会化分享,主要是为了方便用户使用软件和软件的推广应用。在直播app开发中,假如每个平台都一个一个地去集成,既消耗时间,也会增加重复的工作,好在三方登录和分享功能已经有第三方平台帮我们做好了,我们直接调用其SDK即可。
国内用的比较多的就是Mob和友盟,这里我们以mob为例,分析一下直播app开发是怎样实现三方登陆和分享的。
一、创建应用
1、注册账号
只有用户注册了平台账号,才可以创建应用,在直播app开发中使用Mob平台提供的第三方登录和社会化分享工具。
Mob官网地址:http://www.mob.com/
2、创建应用
点击右侧头像栏那里,选择进入后台,选择ShareSDK,立即使用并创建名为MobShareSDKDemo的Android应用。
获取创建应用成功后的APP Key和 APP Secret。
3、点击下方链接下载SDK。
http://www.mob.com/#/downloadDetail/ShareSDK/android
二、下载和注册
以QQ,微信,新浪微博为例,仅需要下载相对应的集成文档即可。下载完成后的是一个压缩包文件,解压之后有两个文件夹,一个是ShareSDK for Android ApiDoc,是一个api文档。另外一个是ShareSDK for Android,打开这个文件夹,可以获得直播app开发需要用到的源码,以及资源文件和jar包。
接下来,我们要去各大社交平台继续注册应用,这里我们以QQ,微信,微博为例,需要到相应的开发平台进行注册。跟Mob平台同一个道理,只有注册完之后才能进行py交易,欧不,是进行第三方平台登录和社会化分享。
1、腾讯开放平台
申请地址: http://open.qq.com/
如果没有在腾讯开放平台注册过开发者信息,需要先注册开发者信息,待开发者信息审核通过,我们实际项目应用才能上线,否则会受到腾讯平台的限制。以下微信,微博同理。
来到开放平台首页,找到“应用接入”—>”创建移动应用”—>“移动应用 安卓”—>创建应用后“完善信息”—>保存腾讯开放平台提供给我们的APP ID和APP KEY。
把直播app开发的应用信息填写完整,因为这里我们仅仅是演示demo,把有的信息填上去即可,没有的不填也没有关系,最后保存应用信息。
点击“管理中心”来到管理中心页面,找到未上线的项目MobShareSDKDemo,点进去,进入我们Demo的详情页。由于这里我们需要做到QQ登录,所以我们需要在基础服务那一栏里找到“QQ登录”,添加应用调试者信息。其实说白了就是添加几个qq号码,在调试的时候可以使用。
2、微信开放平台
申请地址: https://open.weixin.qq.com/
来到微信开放平台首页,在标题栏找到“管理中心”—>”创建移动应用”—>“填写基本信息”—>“填写平台信息”
※ 这里需要注意应用签名这一栏,在实际直播app开发过程中,应用签名需要先使用签名文件生成apk包安装到手机上,再根据签名生成工具获得应用签名。前民工具不仅可以生成签名文件,还可以自动签名,以及生成SHA1和MD5的值。
下载签名生成工具请戳下面这个链接:
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
最后得到的应用签名如下:
填写完信息后微信需要审核,审核时间为7天左右,但实际审核一般几天就能通过,不过为了节省开发时间,最好还是提前申请注册应用信息。
3.新浪微博开放平台
申请地址:http://open.weibo.com/
来到新浪微博开放平台首页,在找到“移动应用”—>”立即接入”—>“创建新应用”—>填写完应用名称,选择Android平台即可
在应用信息的“基本信息”中,可以找到我们需要接下来填入到ShareSDK.xml中的App Key、App Secret。
※ 注意,我们需要在“高级信息”中填写OAuth2.0 授权设置回调地址,否则会报一个redirect_uri_mismatch的错误信息。
※ 同时要注意的是,我们需要在“基本信息”中编辑应用基本信息,可以填3套对应包名签名应用信息。这里,包名都一样(com.donkor.demo.mobsharesdk),我们填写两套Android签名即可,一个根据debug.apk安装上去根据包名获取,一个根据对应的签名文件安装到手机上的release.apk获得。
第一个是方便我们在直播app开发调试的过程中测试,第二个则是方便我们项目上线时使用。新浪微博要求的其他应用基本信息必须填写的,根据要求把他填写完整,保存即可。
※ 应用信息没有提交审核,想要测试的话需要添加测试账号信息,否则会报一个号码403的 applications over the unaudited use restrictions!错误。
文件不存在(C8998)的错误,同样经常在直播app开发中出现,原因可能是台上的包名和签名与应用的不相同,或者是OAuth2.0授权设置中设置的回调地址与应用内调用的不同。
三、配置信息与使用
1.打开studio新建MobShareSDKDemo的项目
2.依赖所需要的jar包和新建一个assets文件夹放入ShareSDK.xml
3.将上面下载下来,解压出来的SDK中ShareSDK for Android\Libs\OneKeyShare\src目录下的源码直接拷贝到项目中
4.由于直播app开发使用到了微信,所以需要新建wxapi目录再放置WXEntryActivity(这里的目录名和类名必须遵从微信的要求)
WXEntryActivity.java的代码如下:
/* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */ package com.donkor.demo.mobsharesdk.wxapi; import android.content.Intent; import android.widget.Toast; import cn.sharesdk.wechat.utils.WXAppExtendObject; import cn.sharesdk.wechat.utils.WXMediaMessage; import cn.sharesdk.wechat.utils.WechatHandlerActivity; /** 微信客户端回调activity示例 */ public class WXEntryActivity extends WechatHandlerActivity { /** * 处理微信发出的向第三方应用请求app message * <p> * 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中 * 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可 * 做点其他的事情,包括根本不打开任何页面 */ public void onGetMessageFromWXReq(WXMediaMessage msg) { if (msg != null) { Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName()); startActivity(iLaunchMyself); } } /** * 处理微信向第三方应用发起的消息 * <p> * 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享 * 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信 * 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作 * 回调。 * <p> * 本Demo只是将信息展示出来,但你可做点其他的事情,而不仅仅只是Toast */ public void onShowMessageFromWXReq(WXMediaMessage msg) { if (msg != null && msg.mediaObject != null && (msg.mediaObject instanceof WXAppExtendObject)) { WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject; Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show(); } } }
5.配置相应的权限和注册所需要的Activity
<uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <!-- 蓝牙分享所需的权限,不需要用到的话可以省略 --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize" > <intent-filter> <!-- ※这里需要将1105785901改成你在腾讯申请后得到的AppId--> <data android:scheme="tencent1105785901" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- 调用新浪原生SDK,需要注册的回调activity --> <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <!--微信分享回调 --> <activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
6.修改ShareSDK.xml文件
因为微信没有审核通过,所以没办法验证,这里我们以新浪微博,QQ为例,修改ShareSDK.xml文件。想验证微信的话,需要在微信平台填写清晰、完整的信息,提交审核通过即可,修改的过程同下。
<!-- 修改成你在sharesdk后台注册的应用的appkey"--> <ShareSDK AppKey = "1985fae01629d"/> <SinaWeibo Id="2" SortId="2" AppKey="2022241043" AppSecret="6e22ea802d34e493d6663294bd7597a0 " RedirectUrl="http://blog.csdn.net/donkor_" ShareByAppClient="true" Enable="true" /> <QQ Id="7" SortId="7" AppId="1105785901" AppKey="k2sXKmeDIqrjpLO4" BypassApproval="true" ShareByAppClient="true" Enable="true"/>
7.添加分享代码
ShareSDK.initSDK(MainActivity.this); OnekeyShare oks = new OnekeyShare(); // 关闭sso授权 oks.disableSSOWhenAuthorize(); // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法 // oks.setNotification(R.drawable.ic_launcher, // getString(R.string.app_name)); // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用 oks.setTitle("分享标题"); // titleUrl是标题的网络链接,仅在人人网和QQ空间使用 oks.setTitleUrl("http://blog.csdn.net/donkor_"); // text是分享文本,所有平台都需要这个字段 oks.setText("分享文本内容"); // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数 // oks.setImagePath("/sdcard/test.jpg");// // 确保SDcard下面存在此张图片 oks.setImageUrl("https://img-blog.csdn.net/20161115193036196"); // url仅在微信(包括好友和朋友圈)中使用 oks.setUrl("http://blog.csdn.net/donkor_"); // comment是我对这条分享的评论,仅在人人网和QQ空间使用 //oks.setComment(""); // site是分享此内容的网站名称,仅在QQ空间使用 oks.setSite(getString(R.string.app_name)); // siteUrl是分享此内容的网站地址,仅在QQ空间使用 //oks.setSiteUrl(getString(R.string.settingShareSiteUrl)); // 启动分享GUI oks.show(MainActivity.this);
8.添加第三方登录代码
//初始化 ShareSDK.initSDK(this); //执行授权,获取用户信息 private void authorize(Platform plat) { if (plat.isValid()) { String userId = plat.getDb().getUserId(); if (!TextUtils.isEmpty(userId)) { UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this); login(plat.getName(), userId, null); return; } } plat.setPlatformActionListener(MainActivity.this); //true不使用SSO授权,false使用SSO授权 plat.SSOSetting(false); plat.showUser(null); } //发送登陆信息 private void login(String plat, String userId, HashMap<String, Object> userInfo) { Message msg = new Message(); msg.what = MSG_LOGIN; msg.obj = plat; UIHandler.sendMessage(msg, this); }
UIHandler需要实现接口,并实现其中的方法
@Override public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_USERID_FOUND: { Toast.makeText(this, R.string.userid_found, Toast.LENGTH_SHORT).show(); } break; case MSG_LOGIN: { String text = getString(R.string.logining, msg.obj); Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); } break; case MSG_AUTH_CANCEL: { Toast.makeText(this, R.string.auth_cancel, Toast.LENGTH_SHORT).show(); } break; case MSG_AUTH_ERROR: { Toast.makeText(this, R.string.auth_error, Toast.LENGTH_SHORT).show(); } break; case MSG_AUTH_COMPLETE: { Toast.makeText(this, R.string.auth_complete, Toast.LENGTH_SHORT).show(); } break; } return false; }
plat.setPlatformActionListener(MainActivity.this)设置监听,需要实现它的三个方法:
onCancel 取消 onComplete 完成 onError 异常 @Override public void onComplete(Platform platform, int action, HashMap<String, Object> res) { if (action == Platform.ACTION_USER_INFOR) { //登录成功,获取需要的信息 UIHandler.sendEmptyMessage(MSG_AUTH_COMPLETE, this); login(platform.getName(), platform.getDb().getUserId(), res); Log.e("asd", "platform.getName():" + platform.getName()); Log.e("asd", "platform.getDb().getUserId()" + platform.getDb().getUserId()); String openid = platform.getDb().getUserId() + ""; String gender = platform.getDb().getUserGender(); String head_url = platform.getDb().getUserIcon(); String nickname = platform.getDb().getUserName(); Log.e("asd", "openid:" + openid); Log.e("asd", "gender:" + gender); Log.e("asd", "head_url:" + head_url); Log.e("asd", "nickname:" + nickname); } } @Override public void onError(Platform platform,int action,Throwable t){ if(action==Platform.ACTION_USER_INFOR){ UIHandler.sendEmptyMessage(MSG_AUTH_ERROR,this); } t.printStackTrace(); } @Override public void onCancel(Platform platform, int action) { if (action == Platform.ACTION_USER_INFOR) { UIHandler.sendEmptyMessage(MSG_AUTH_CANCEL, this); } }
至此,直播app开发就完成了mob三方登录分享,方便用户将平台内容分享到各个平台,增加用户粘性。如果想要了解更多直播app开发时知识,可继续关注。
声明:以上内容为云豹科技原创,未经作者本人同意,禁止转载,否则将追究相关法律责任www.yunbaokj.com