1. 程式人生 > >第三方登入分享

第三方登入分享

libs導包
drawlayout
values
添加簽名檔案
build grade裡新增
signingConfigs {
debug {
storeFile file(‘debug.keystore’)
storePassword “android”
keyAlias “androiddebugkey”
keyPassword “android”
}
}
xml佈局

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:id="@+id/iv_login"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="登入" />

    <Button
        android:id="@+id/iv_share"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="分享" />

</LinearLayout>

<TextView
    android:id="@+id/tv_result"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="qq" />

清單檔案裡許可權

<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.READ_LOGS"
    tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
    <meta-data
        android:name="UMENG_APPKEY"
        android:value="573f0e9267e58e8e48001545">
    </meta-data>

    <!-- 友盟所需配置的Activity資訊-->
    <!--注意:在自定義Application中的keyID必須要和清單檔案的AuthActivity下的scheme="tencent???"保持一致-->
    <activity
        android: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"/>

            <data android:scheme="tencent1106036236"/>
        </intent-filter>
    </activity>
    <activity
        android:name="com.umeng.qq.tencent.AssistActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

自定義一個MyApplication
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);
}
{
PlatformConfig.setQQZone(“1106036236”,“mjFCi0oxXZKZEWJs”);
}
}
別忘了註冊
android:name=".MyApplication"
下面是MainActivity裡面的

public class MainActivity extends AppCompatActivity {

private Button iv_login;
private TextView tv_result;

//A.定義裝平臺的容器
public ArrayList<SnsPlatform> platforms = new ArrayList<SnsPlatform>();
private SHARE_MEDIA[] list = {SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE};
private UMShareAPI mUMShareAPI;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    iv_login = (Button) findViewById(R.id.iv_login);
    tv_result = (TextView) findViewById(R.id.tv_result);

    //A.三方平臺,新增到遍歷的集合中
    initPlatforms();

    //A.獲取UM的物件
    mUMShareAPI = UMShareAPI.get(MainActivity.this);

    //A.獲取是否授權
    final boolean isauth = UMShareAPI.get(this).isAuthorize(this, platforms.get(0).mPlatform);

    //A.點選QQ的頭像,進行授權
    iv_login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isauth){
                Toast.makeText(MainActivity.this, "授權成功", Toast.LENGTH_SHORT).show();
                mUMShareAPI.deleteOauth(MainActivity.this, platforms.get(0).mPlatform,authListener);
            }else{
                mUMShareAPI.doOauthVerify(MainActivity.this, platforms.get(0).mPlatform,authListener);
            }
            mUMShareAPI.getPlatformInfo(MainActivity.this, platforms.get(0).mPlatform,authListener);

        }
    });

    //B.分享的邏輯程式碼
    Button iv_share = (Button) findViewById(R.id.iv_share);

    final UMImage image = new UMImage(MainActivity.this, "http://b.hiphotos.baidu.com/zhidao/pic/item/63d9f2d3572c11df28e42e30602762d0f703c2e8.jpg");//網路圖片
    final UMImage imagelocal = new UMImage(this, R.mipmap.ic_launcher);
    imagelocal.setThumb(new UMImage(this, R.mipmap.ic_launcher));
    imagelocal.setTitle("易宸鋒好帥");
    iv_share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new ShareAction(MainActivity.this).withMedia(image)
                    .setPlatform(platforms.get(0).mPlatform)
                    .setCallback(shareListener).share();

            new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ)
                    .withText("hello")
                    .setCallback(shareListener)
                    .share();
        }
    });

}

//A.
private void initPlatforms() {
    //A.集合清空
    platforms.clear();
    //A.通過for迴圈,把陣列資料新增到集合中
    for (SHARE_MEDIA e : list) {
        if (!e.toString().equals(SHARE_MEDIA.GENERIC.toString())) {
            platforms.add(e.toSnsPlatform());
        }
    }
}

//A.
UMAuthListener authListener = new UMAuthListener() {
    @Override
    public void onStart(SHARE_MEDIA platform) {
        //授權開始的回撥,可以用來處理等待框,或相關的文字提示
    }

    @Override//授權成功時回撥
    public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
        //獲取使用者授權後的資訊
        Set<String> strings = data.keySet();
        data.get("profile_image_url");
        String temp="";
        for(String key: strings ){
            temp =temp +key +" :" +data.get(key) +"\n";
        }
        tv_result.setText(temp);
    }

    @Override
    public void onError(SHARE_MEDIA platform, int action, Throwable t) {
        Toast.makeText(MainActivity.this, "失敗:" + t.getMessage(), Toast.LENGTH_LONG).show();

    }

    @Override
    public void onCancel(SHARE_MEDIA platform, int action) {
        Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
    }
};

//A.
@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}


//B.分享的邏輯程式碼
private UMShareListener shareListener = new UMShareListener() {
    @Override
    public void onStart(SHARE_MEDIA platform) {
    }

    @Override
    public void onResult(SHARE_MEDIA platform) {
        Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) {

    }

    @Override
    public void onCancel(SHARE_MEDIA platform) {
        Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();

    }
};

}
接下來大功告成