友盟的微信登錄,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-data
            android:name="UMENG_APPKEY"
            android:value="友盟APPKey" />
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="可甜可鹽(如果無多渠道打包,可不填)" />

        <!--微信-->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!--新浪-->
        <activity
            android:name="com.umeng.socialize.media.WBShareCallBackActivity"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
        <activity
            android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
            android:configChanges="keyboardHidden|orientation"
            android:exported="false"
            android:windowSoftInputMode="adjustResize" />

        <activity
            android: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-->
        <activity
            android: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>
        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

3、在application中註冊自己的App(像這樣)

 <application

        android: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;

    @Override
    public 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() {
        @Override
        public void onStart(SHARE_MEDIA platform) {
            //授權開始的回調
        }

        @Override
        public 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);
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText(getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
        }
    };

    //這個方法的作用  當第一次登錄成功時   第二次就不會跳入登錄頁面  
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public 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;
             //QQ
            case 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、附上效果圖:

qw         we            rt

分享(我寫了一些工具類,直接分享出來吧

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">

    <TextView
        android: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" />

    <LinearLayout
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="13dp"
        android:layout_marginRight="13dp"
        android:orientation="horizontal"
        android:weightSum="3">

        <TextView
            android: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" />

        <TextView
            android: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" />

        <TextView
            android: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>

    <LinearLayout
        android: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">

        <TextView
            android: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" />

        <TextView
            android: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" />


        <TextView
            android: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" />

    <TextView
        android: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;
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_cancel:
                dialog.dismiss();
                break;
            case R.id.tv_weChat:  // 設置微信好友分享內容
                if (!NoFastClickUtils.isFastClick(800)) {
                    //鏈接url
                    UMWeb 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)) {
                    //鏈接url
                    UMWeb 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)) {
                    //鏈接url
                    UMWeb 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() {
        @Override
        public void onStart(SHARE_MEDIA share_media) {

        }

        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(context, "分享成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Log.d("分享失敗", "t:" + t);
        }

        @Override
        public 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();

 

https://img-blog.csdnimg.cn/20191106172851181.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppbmdfODA=,size_16,color_FFFFFF,t_70

好了,這就是整個效果圖了,有問題歡迎隨時反饋,看到會及時回覆

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章