600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android 项目必备(三十七)-->使用友盟集成 QQ 微信 微博等第三方分享与登录

Android 项目必备(三十七)-->使用友盟集成 QQ 微信 微博等第三方分享与登录

时间:2023-07-04 04:22:05

相关推荐

Android 项目必备(三十七)-->使用友盟集成 QQ 微信 微博等第三方分享与登录

文章目录

效果图实战

最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的。为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟。

效果图

实战

1. 申请友盟 Appkey

直接到友盟官网申请:友盟 SDK

2. 下载 SDK

3. 准备资源

使用友盟的集成工具快速集成友盟的分享SDK:双击 友盟集成工具.jar– 选择使用的平台和IDE,如图:

点击 OK 键,会在当前目录生成名为umeng_integratetool_result的文件夹,如图:

4. 开始集成

将上面的文件夹依次粘贴到工程相应的文件夹即可,如图:

debug.keystore文件拷贝到项目的app目录下(对应app build中相应的位置),目的是为了使用友盟的签名,如图:

添加回调 Activity 微信回调:

其实在第一步拷贝的时候已经添加了。即在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivityQQ与新浪微博的回调:

QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中添加如下代码:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}

5. 配置清单文件 Android Manifest.xml

添加权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" / <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" / <uses-permission android:name="android.permission.READ_PHONE_STATE" / <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/ <uses-permission android:name="android.permission.INTERNET" / <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" / <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" / <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /

添加sdk中需要的Activity

<!--微信-- <activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"/ <!--新浪微博-- <activityandroid:name=".WBShareActivity"android:configChanges="keyboardHidden|orientation"android:screenOrientation="portrait" <intent-filter <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/ <category android:name="android.intent.category.DEFAULT"/ </intent-filter </activity <!--qq精简版-- <activityandroid:name="com.umeng.qq.tencent.AuthActivity"android:launchMode="singleTask"android:noHistory="true" <intent-filter <action android:name="android.intent.action.VIEW"/ <category android:name="android.intent.category.DEFAULT"/ <category android:name="android.intent.category.BROWSABLE"/ <!--这里的scheme是qq分享要用的,100424468为自己申请的appid,真实项目中需要替换-- <data android:scheme="tencent100424468"/ </intent-filter </activity <activityandroid:name="com.umeng.qq.tencent.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"/ <!--分享编辑页-- <activityandroid:name="com.umeng.socialize.editorpage.ShareActivity"android:excludeFromRecents="true"android:theme="@style/Theme.UMDefault"/

添加友盟appkey

<meta-dataandroid:name="UMENG_APPKEY"android:value="561**********990035bf" </meta-data

6. 配置三方 appkey

新建 MyApplication 继承 Application(注意:需要在清单文件中配置该MyApplication),在 MyApplication 文件中配置三方平台的 appkey 和初始化 sdk。如下:

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();UMShareAPI.get(this);//初始化sdk//开启debug模式,方便定位错误,具体错误检查方式可以查看/social/android/quick-integration的报错必看,正式发布,请关闭该模式Config.DEBUG = true;} //各个平台的配置{//微信PlatformConfig.setWeixin("wxdc1e388c3822c80b", "key1"); //新浪微博(第三个参数为回调地址)PlatformConfig.setSinaWeibo("3921700954", "key2","/sina2/callback"); //QQPlatformConfig.setQQZone("100424468", "key3");}}

7. 登录代码 MainActivity.java

public class MainActivity extends AppCompatActivity {private String TAG = this.getClass().getSimpleName(); @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} public void qqLogin(View view) {authorization(SHARE_MEDIA.QQ);} public void weiXinLogin(View view) {authorization(SHARE_MEDIA.WEIXIN);} public void sinaLogin(View view) {authorization(SHARE_MEDIA.SINA);} //授权private void authorization(SHARE_MEDIA share_media) {UMShareAPI.get(this).getPlatformInfo(this, share_media, new UMAuthListener() {@Overridepublic void onStart(SHARE_MEDIA share_media) {Log.d(TAG, "onStart " + "授权开始");} @Overridepublic void onComplete(SHARE_MEDIA share_media, int i, Map<String, String map) {Log.d(TAG, "onComplete " + "授权完成"); //sdk是6.4.4的,但是获取值的时候用的是6.2以前的(access_token)才能获取到值,未知原因String uid = map.get("uid");String openid = map.get("openid");//微博没有String unionid = map.get("unionid");//微博没有String access_token = map.get("access_token");String refresh_token = map.get("refresh_token");//微信,qq,微博都没有获取到String expires_in = map.get("expires_in");String name = map.get("name");String gender = map.get("gender");String iconurl = map.get("iconurl");Toast.makeText(getApplicationContext(), "name=" + name + ",gender=" + gender, Toast.LENGTH_SHORT).show(); //拿到信息去请求登录接口。。。} @Overridepublic void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {Log.d(TAG, "onError " + "授权失败");} @Overridepublic void onCancel(SHARE_MEDIA share_media, int i) {Log.d(TAG, "onCancel " + "授权取消");}});} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}}

8. 分享代码

public class MainActivity extends AppCompatActivity {private String TAG = this.getClass().getSimpleName(); @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} public void qq(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.QQ);} public void weiXin(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.WEIXIN);} public void weixinCircle(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.WEIXIN_CIRCLE);} public void sina(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.SINA);} public void Qzone(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.QZONE);} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}

9. 分享工具类ShareUtils.java:

public class ShareUtils {/*** 分享链接*/public static void shareWeb(final Activity activity, String WebUrl, String title, String description, String imageUrl, int imageID, SHARE_MEDIA platform) {UMWeb web = new UMWeb(WebUrl);//连接地址web.setTitle(title);//标题web.setDescription(description);//描述if (TextUtils.isEmpty(imageUrl)) {web.setThumb(new UMImage(activity, imageID)); //本地缩略图} else {web.setThumb(new UMImage(activity, imageUrl)); //网络缩略图} new ShareAction(activity).setPlatform(platform).withMedia(web).setCallback(new UMShareListener() {@Overridepublic void onStart(SHARE_MEDIA share_media) {}@Overridepublic void onResult(final SHARE_MEDIA share_media) {activity.runOnUiThread(new Runnable() {@Overridepublic void run() {if (share_media.name().equals("WEIXIN_FAVORITE")) {Toast.makeText(activity, share_media + " 收藏成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(activity, share_media + " 分享成功", Toast.LENGTH_SHORT).show();}}});}@Overridepublic void onError(final SHARE_MEDIA share_media, final Throwable throwable) {if (throwable != null) {Log.d("throw", "throw:" + throwable.getMessage());}activity.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(activity, share_media + " 分享失败", Toast.LENGTH_SHORT).show();}});}@Overridepublic void onCancel(final SHARE_MEDIA share_media) {activity.runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(activity, share_media + " 分享取消", Toast.LENGTH_SHORT).show();}});}}).share(); //新浪微博中图文+链接/*new ShareAction(activity).setPlatform(platform).withText(description + " " + WebUrl).withMedia(new UMImage(activity,imageID)).share();*/}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。