友盟的微信登录,QQ,新浪微博登录功能和分享功能
生活随笔
收集整理的這篇文章主要介紹了
友盟的微信登录,QQ,新浪微博登录功能和分享功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在這里我用的是友盟的登錄,需要的請參考本文,直接擼代碼,
提示:微信登錄在一段時間內,只授權一次(只能調起一次登錄頁面),除非更換用戶,才可以再調起登錄頁面。
0、本文需要導入jar包導完后鼠標右鍵Add Library,之后再build gradle中應該是這樣的
jar包的地址https://download.csdn.net/download/jing_80/10768648 //友盟compile 'com.umeng.sdk:common:latest.integration'//可能的自己添加implementation files('libs/SocialSDK_Sina_Simplify.jar')implementation files('libs/SocialSDK_QQ_Simplify.jar')implementation files('libs/SocialSDK_WeChat_Simplify.jar')implementation files('libs/umeng_social_api.jar')implementation files('libs/umeng_social_net.jar')implementation files('libs/umeng_social_shareview.jar')implementation files('libs/umeng_social_tool.jar')1、添加權限(還是老樣子,缺什么權限,自己添加呢)
<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" />2、manifest中添加
<!--基本信息配置--><meta-dataandroid:name="UMENG_APPKEY"android:value="友盟APPKey" /><meta-dataandroid:name="UMENG_CHANNEL"android:value="可甜可鹽(如果無多渠道打包,可不填)" /><!--微信--><activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar" /><!--新浪--><activityandroid:name="com.umeng.socialize.media.WBShareCallBackActivity"android:configChanges="keyboardHidden|orientation"android:exported="false"android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity><activityandroid:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"android:configChanges="keyboardHidden|orientation"android:exported="false"android:windowSoftInputMode="adjustResize" /><activityandroid:name="com.sina.weibo.sdk.share.WbShareTransActivity"android:launchMode="singleTask"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"><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.tencent.tauth.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" /><!--填應用的Appid--><data android:scheme="tencentxxxxxxxx" /></intent-filter></activity><activityandroid:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar" />3、在application中注冊自己的App(像這樣)
<applicationandroid:name=".utils.App"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme">4、App中的內容
public class App extends Application {public static AppCompatActivity context;@Overridepublic void onCreate() {super.onCreate(); // 友盟分享UMConfigure.init(this, "友盟Appkey", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, null);}{//這些值在各個開發平臺注冊應用時,會提供的,去相應的開發平臺找就可以了PlatformConfig.setWeixin("Appid微信平臺有", "secret找項目經理要");PlatformConfig.setQQZone("id", "key值");PlatformConfig.setSinaWeibo("key", "secret", "http://sns.whalecloud.com");}}5、在wxapi包下建類WXEntryActivity,一定得是wxapi包下,類中什么都不用寫,umeng幫我們封裝好了
import com.umeng.weixin.callback.WXCallbackActivity;public class WXEntryActivity extends WXCallbackActivity { }6、動態權限,手機大于6.0可能需要用到,
if (Build.VERSION.SDK_INT >= 23) {String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CALL_PHONE, Manifest.permission.READ_LOGS, Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.SET_DEBUG_APP, Manifest.permission.SYSTEM_ALERT_WINDOW, Manifest.permission.GET_ACCOUNTS, Manifest.permission.WRITE_APN_SETTINGS};ActivityCompat.requestPermissions(this, mPermissionList, 123);}登錄
7、在哪個頁面實現登錄,就在哪里寫這些代碼
private UMAuthListener umAuthListener = new UMAuthListener() {@Overridepublic void onStart(SHARE_MEDIA platform) {//授權開始的回調}@Overridepublic void onComplete(SHARE_MEDIA platform, int action, Map<String, String> map) {Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show(); // String uid = map.get("uid");//獲取用戶id // String name = map.get("name");//獲取用戶昵稱 // String gender = map.get("gender");//獲取用戶性別 // String iconurl = map.get("iconurl");//獲取用戶頭像地址String openid = map.get("openid");Log.d("ThirdActivity", openid);}@Overridepublic void onError(SHARE_MEDIA platform, int action, Throwable t) {Toast.makeText(getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();}@Overridepublic void onCancel(SHARE_MEDIA platform, int action) {Toast.makeText(getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();}};//這個方法的作用 當第一次登錄成功時 第二次就不會跳入登錄頁面 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}@Overridepublic void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {if (requestCode == 123) {Toast.makeText(this, "授權成功", Toast.LENGTH_SHORT).show();}}8、接下來實現登錄功能
switch (view.getId()) {//微信case R.id.mThird_WeChat:UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, umAuthListener);break;//QQcase R.id.mThird_QQ:UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.QQ, umAuthListener);break;//微博case R.id.mThird_Weibo:UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.SINA, umAuthListener);break;}}好了,這樣就實現登錄功能了。
8、附上效果圖:
?? ? ? ???? ? ? ? ? ?
分享(我寫了一些工具類,直接分享出來吧)
1、value的styles文件中:
<style name="AlertDialogStyle" parent="@android:style/Theme.Dialog"><item name="android:windowBackground">@android:color/transparent</item><item name="android:windowContentOverlay">@null</item><item name="android:windowIsFloating">true</item><item name="android:windowFrame">@null</item><item name="android:backgroundDimEnabled">true</item><item name="android:windowNoTitle">true</item><item name="android:windowIsTranslucent">true</item></style>2、res的drawable中sk_bg_image_dialog
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="@color/white" /><corners android:radius="14dp" /> </shape>3、布局文件sk_view_share
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_dialog"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:background="@drawable/sk_bg_image_dialog"android:gravity="center_horizontal"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginTop="18dp"android:layout_marginBottom="14dp"android:text="分享至"android:textColor="#FF3F4A54"android:textSize="14sp" /><LinearLayoutandroid:layout_width="250dp"android:layout_height="wrap_content"android:layout_marginLeft="13dp"android:layout_marginRight="13dp"android:orientation="horizontal"android:weightSum="3"><TextViewandroid:id="@+id/tv_weChat"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_weight="1"android:drawableTop="@mipmap/icon_wechat"android:drawablePadding="4dp"android:gravity="center_horizontal"android:text="微信"android:textColor="#333333"android:textSize="12sp" /><TextViewandroid:id="@+id/tv_circle"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_weight="1"android:drawableTop="@mipmap/icon_circle"android:drawablePadding="4dp"android:gravity="center_horizontal"android:text="朋友圈"android:textColor="#333333"android:textSize="12sp" /><TextViewandroid:id="@+id/tv_qq"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_weight="1"android:drawableTop="@mipmap/icon_qq"android:drawablePadding="4dp"android:gravity="center_horizontal"android:text="QQ"android:textColor="#333333"android:textSize="12sp" /></LinearLayout><LinearLayoutandroid:layout_width="250dp"android:layout_height="wrap_content"android:layout_marginLeft="13dp"android:layout_marginTop="20dp"android:layout_marginRight="13dp"android:layout_marginBottom="21dp"android:orientation="horizontal"android:weightSum="3"><TextViewandroid:id="@+id/tv_weibo"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_weight="1"android:drawableTop="@mipmap/icon_weibo"android:drawablePadding="4dp"android:gravity="center_horizontal"android:text="新浪微博"android:textColor="#333333"android:textSize="12sp" /><TextViewandroid:id="@+id/tv_space"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_weight="1"android:drawableTop="@mipmap/icon_space"android:drawablePadding="4dp"android:gravity="center_horizontal"android:text="QQ空間"android:textColor="#333333"android:textSize="12sp" /><TextViewandroid:id="@+id/tv_link"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:layout_weight="1"android:drawableTop="@mipmap/icon_link"android:drawablePadding="4dp"android:gravity="center_horizontal"android:text="復制鏈接"android:textColor="#333333"android:textSize="12sp" /></LinearLayout><include layout="@layout/include_view_line" /><TextViewandroid:id="@+id/tv_cancel"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:paddingLeft="16dp"android:paddingTop="11dp"android:paddingRight="16dp"android:paddingBottom="11dp"android:text="取消分享"android:textColor="#888888"android:textSize="17sp" /> </LinearLayout>4、防止快速點擊的工具類NoFastClickUtils
public class NoFastClickUtils {private static long lastClickTime = 0;//上次點擊的時間private static int spaceTime = 500;//時間間隔public static boolean isFastClick() {long currentTime = System.currentTimeMillis();//當前系統時間boolean isAllowClick;//是否允許點擊if (currentTime - lastClickTime > spaceTime) {isAllowClick = false;} else {isAllowClick = true;}lastClickTime = currentTime;return isAllowClick;}public static boolean isFastClick(int time) {long currentTime = System.currentTimeMillis();//當前系統時間boolean isAllowClick;//是否允許點擊if (currentTime - lastClickTime > time) {isAllowClick = false;} else {isAllowClick = true;}lastClickTime = currentTime;return isAllowClick;} }5、分享的View(ShareDialog)
public class ShareDialog implements View.OnClickListener {private Context context;private Dialog dialog;private Display display;private LinearLayout ll_dialog;private TextView tv_weChat;private TextView tv_circle;private TextView tv_qq;private TextView tv_weibo;private TextView tv_space;private TextView tv_link;private TextView tv_cancel;private String title, contentUrl, content;private UMImage image;public ShareDialog(Context context) {this.context = context;WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);display = windowManager.getDefaultDisplay();}public ShareDialog builder() {View view = LayoutInflater.from(context).inflate(R.layout.sk_view_share, null);ll_dialog = view.findViewById(R.id.ll_dialog);tv_weChat = view.findViewById(R.id.tv_weChat);tv_circle = view.findViewById(R.id.tv_circle);tv_qq = view.findViewById(R.id.tv_qq);tv_weibo = view.findViewById(R.id.tv_weibo);tv_space = view.findViewById(R.id.tv_space);tv_link = view.findViewById(R.id.tv_link);tv_cancel = view.findViewById(R.id.tv_cancel);tv_weChat.setOnClickListener(this);tv_circle.setOnClickListener(this);tv_qq.setOnClickListener(this);tv_weibo.setOnClickListener(this);tv_space.setOnClickListener(this);tv_link.setOnClickListener(this);tv_cancel.setOnClickListener(this);dialog = new Dialog(context, R.style.AlertDialogStyle);dialog.setContentView(view);ll_dialog.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));return this;}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.tv_cancel:dialog.dismiss();break;case R.id.tv_weChat: // 設置微信好友分享內容if (!NoFastClickUtils.isFastClick(800)) {//鏈接urlUMWeb web = new UMWeb(contentUrl);web.setTitle(title);//標題web.setDescription(content);web.setThumb(image); //縮略圖new ShareAction(App.context).setPlatform(SHARE_MEDIA.WEIXIN).setCallback(umShareListener).withMedia(web).share();}break;case R.id.tv_circle:// 設置微信朋友圈分享內容if (!NoFastClickUtils.isFastClick(800)) {//鏈接urlUMWeb web = new UMWeb(contentUrl);web.setTitle(title);//標題web.setDescription(content);web.setThumb(image); //縮略圖new ShareAction(App.context).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE).setCallback(umShareListener).withMedia(web).share();}break;case R.id.tv_qq:// 設置QQ分享內容if (!NoFastClickUtils.isFastClick(800)) {//鏈接urlUMWeb web = new UMWeb(contentUrl);web.setTitle(title);//標題web.setDescription(content);web.setThumb(image); //縮略圖new ShareAction(App.context).setPlatform(SHARE_MEDIA.QQ).setCallback(umShareListener).withMedia(web).share();}break;case R.id.tv_weibo:// 設置微博分享內容if (!NoFastClickUtils.isFastClick(800)) {UMWeb web = new UMWeb(contentUrl);web.setTitle(title);//標題web.setDescription(content);web.setThumb(image); //縮略圖new ShareAction(App.context).setPlatform(SHARE_MEDIA.SINA).setCallback(umShareListener).withMedia(web).share();}break;case R.id.tv_space:// 設置微信朋友圈分享內容if (!NoFastClickUtils.isFastClick(800)) {UMWeb web = new UMWeb(contentUrl);web.setTitle(title);//標題web.setDescription(content);web.setThumb(image); //縮略圖new ShareAction(App.context).setPlatform(SHARE_MEDIA.QZONE).setCallback(umShareListener).withMedia(web).share();}break;case R.id.tv_link:if (!NoFastClickUtils.isFastClick(800)) {ClipboardManager mClipboardManager = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);ClipData clipData = ClipData.newRawUri("Label", Uri.parse(contentUrl));mClipboardManager.setPrimaryClip(clipData);Toast.makeText(context, "復制完成", Toast.LENGTH_SHORT).show();}break;}}/*** 點擊外圍Dialog消失** @param cancel* @return*/public ShareDialog setCancelable(boolean cancel) {dialog.setCancelable(cancel);return this;}/*** 設置標題** @param title* @return*/public ShareDialog setTitle(String title) {this.title = title;return this;}/*** 設置課程介紹** @param content* @return*/public ShareDialog setContent(String content) {this.content = content;return this;}/*** 設置圖片** @param image* @return*/public ShareDialog setImage(UMImage image) {this.image = image;return this;}/*** 設置連接** @param contentUrl* @return*/public ShareDialog setContentUrl(String contentUrl) {this.contentUrl = contentUrl;return this;}public void show() {dialog.show();}private UMShareListener umShareListener = new UMShareListener() {@Overridepublic void onStart(SHARE_MEDIA share_media) {}@Overridepublic void onResult(SHARE_MEDIA platform) {Toast.makeText(context, "分享成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onError(SHARE_MEDIA platform, Throwable t) {Log.d("分享失敗", "t:" + t);}@Overridepublic void onCancel(SHARE_MEDIA platform) {Log.d("分享取消", platform.toString());}}; }6、在點擊事件中調用
String share_url = 分享的url;UMImage image = new UMImage(this, "圖片鏈接");new ShareDialog(this).builder().setTitle(lessonDetailInfoBean.getTitle()) //標題.setContent(lessonDetailInfoBean.getTitle()) //文本.setImage(image) //圖片.setContentUrl(share_url) //網頁地址.setCancelable(true).show();?
好了,這就是整個效果圖了,有問題歡迎隨時反饋,看到會及時回復
?
總結
以上是生活随笔為你收集整理的友盟的微信登录,QQ,新浪微博登录功能和分享功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android与Js交互时,屏幕不适配问
- 下一篇: 各种优秀依赖库,大赞