当前位置: 代码迷 >> Android >> ShareSDK新版本短信验证和分享冲突解决
  详细解决方案

ShareSDK新版本短信验证和分享冲突解决

热度:52   发布时间:2016-04-28 00:31:45.0
[android]ShareSDK——内容分享和短信验证

前言

新版本ShareSDK的分享和短信验证,按官网的文档,都需要添加一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样。会冲突。

解决办法:分享用旧版本,短信验证用新版本。后面会有解决办法。


分享

导入工程见初识ShareSDK——嵌入和登陆

		<span style="font-size:24px;">OnekeyShare oks = new OnekeyShare();		//所有SSO都是针对新浪微博d		oks.disableSSOWhenAuthorize();		oks.setSilent(true);</span>
如果没有指定分享平台,则默认所有平台都会跳出。

oks.setPlatform(platformName);

一些需要注意的,注释已经很详细了。

		//分享时Notification的图标和文字2.5.9以后的版本不调用此方法		//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));		 // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用		 oks.setTitle(getString(R.string.share));		// titleUrl是标题的网络链接,仅在人人网和QQ空间使用		 oks.setTitleUrl("http://sharesdk.cn");		 // text是分享文本,所有平台都需要这个字段		//有字数限制		 oks.setText("我是分享文本");		// imagePath是图片的本地路径,Linked-In以外的平台都支持此参数(如果本地没有,则后面的语句不会执行)		//oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片<span style="white-space:pre">		</span>//oks.setImageUrl("=");//网络路径  QQ空间有时候分享不成功(权限问题)		// url仅在微信(包括好友和朋友圈)中使用		 oks.setUrl("http://sharesdk.cn");		 	// comment是我对这条分享的评论,仅在人人网和QQ空间使用		 oks.setComment("我是测试评论文本");		 	// site是分享此内容的网站名称,仅在QQ空间使用		 oks.setSite(getString(R.string.app_name));		 	// siteUrl是分享此内容的网站地址,仅在QQ空间使用		 oks.setSiteUrl("http://sharesdk.cn");		 	//设置经纬度(可根据定位获取)		 	//oks.setLatitude(latitude);		 	//oks.setLongitude(longitude);		  			//启动分享GUI(图形用户界面)		 oks.show(this);</span>

短信验证

短信验证和登陆分享申请KEY 和 SECRET的地方不一样。。我犯了这个错误,结果验证的时候提示Appkey无效或被禁用。。



官网下载SDK



将SMS文件夹下的SMSSDK文件拷贝到工程里,作为library导入。

添加权限:

    <uses-permission android:name="android.permission.READ_CONTACTS" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.RECEIVE_SMS" />    <uses-permission android:name="android.permission.GET_TASKS" />    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

添加代码调用:

		SMSSDK.initSDK(this, APP_KEY, APP_SECRET);		RegisterPage page = new RegisterPage();		page.setRegisterCallback(new EventHandler(){			@Override			public void afterEvent(int event, int result, Object data) {				if(result == SMSSDK.RESULT_COMPLETE){					HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;					String country = (String) phoneMap.get("country");					String phone = (String) phoneMap.get("phone"); 					// 提交用户信息,这个方法是获取了手机后,你想采取的操作。					//registerUser(country, phone);					System.out.println(country+phone);				}			}					});		page.show(this);

自定义短信验证界面

都是官网的文档

将private EventHandler eh;声明为全局,为了在Activity的onDestroy()里,对EventHandler注销验证SMSSDK.unregisterEventHandler(eh);

		 eh=new EventHandler(){			 	            @Override	            public void afterEvent(int event, int result, Object data) {	 	               if (result == SMSSDK.RESULT_COMPLETE) {	                //回调完成	                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {	                //提交验证码成功	                	System.out.println("成功!");	                }else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){	                //获取验证码成功	                	System.out.println("获取验证码成功");	                }else if (event ==SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES){	                //返回支持发送验证码的国家列表	                } 	              }else{                                                                 	                 ((Throwable)data).printStackTrace(); 	          }	      } 	   }; 	SMSSDK.registerEventHandler(eh); //注册短信回调

为按钮添加监听事件:

		//获取短信验证		btn_num.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View arg0) {				if (!TextUtils.isEmpty(et_num.getText().toString())) {					SMSSDK.getVerificationCode("86", et_num.getText()							.toString());				}			}		});		//把短信里的验证码提交到服务器		btn_code.setOnClickListener(new OnClickListener() {			@Override			public void onClick(View arg0) {				SMSSDK.submitVerificationCode("86",et_num.getText().toString(), et_code.getText().toString());			}		});

文档地址:无gui接口调用


ShareSDK新版本短信验证和分享冲突解决

因为新版本shareSDK中分享与验证中,mainfest中name中都是"com.mob.tools.MobUIShell"放在一个工程里会冲突。

分享:
将mainfest文件节点

        <activity            android:name="com.mob.tools.MobUIShell"            android:configChanges="keyboardHidden|orientation|screenSize"            android:screenOrientation="portrait"            android:theme="@android:style/Theme.Translucent.NoTitleBar"            android:windowSoftInputMode="stateHidden|adjustResize" >


改为:

        <activity            android:name="cn.sharesdk.framework.ShareSDKUIShell"            android:configChanges="keyboardHidden|orientation|screenSize"            android:screenOrientation="portrait"            android:theme="@android:style/Theme.Translucent.NoTitleBar"            android:windowSoftInputMode="stateHidden|adjustResize" >


将share的libs中

对应的2.6.0的替换为
短信验证的不用变。