【Unity】中實現微信、QQ、微博帳號登錄(Android環境)(官方SDK)

對於一些沒有過安卓開發經驗的開發者來說,爲了實現安卓第三方登陸肯定是費盡了腦汁,不知道從何着手解決,爲了讓開發者少走彎路,下面就給大家介紹下Unity中使用官方SDK實現微信、QQ、微博帳號登錄的方法,一起來看看吧。

一、新建安卓工程並導入jar文件

  注意寫好自己的包名,微信登錄和微博登錄都要用到包名獲取簽名,把獲取到的簽名上傳到開放平臺。

  填好包名後一直點next就可以了,點擊finish完成創建。

  創建完成後,新建一個module類,同樣寫好自己的包名。

二、QQ登錄

QQ登錄時最簡單的一個,因爲不需要簽名。在qq開放平臺下載好sdk,然後copy到libs文件夾下。

  點擊Add as Library就可以了,微信和微博的jar包導入也是一樣,Unity的classes.jar也需要導入,後面就不贅述了。

  通過調用Tencent類的login函數發起登錄/校驗登錄態。

  該API具有兩個作用:

  (1)如果開發者沒有調用mTencent實例的setOpenId、setAccessToken API,則該API執行正常的登錄操作;

  (2)如果開發者先調用mTencent實例的setOpenId、setAccessToken API,則該API執行校驗登錄態的操作。如果登錄態有效,則返回成功給應用,如果登錄態失效,則會自動進入登錄流程,將最新的登錄態數據返回給應用。

建議開發者在每次應用啓動時調用一次該API(先調用setOpenId、setAccessToken),以確保每次打開應用時用戶都是有登錄態的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

public class MainActivity extends UnityPlayerActivity { 

    private Tencent mTencent; 

    private BaseUiListener mBaseUiListener=new BaseUiListener(); 

   

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        mTencent = Tencent.createInstance("你的APPID", this.getApplicationContext()); 

    } 

     

    /**

     * qq登錄代碼  Unity裏調用

     */ 

    public void QQlogin() { 

        //登錄代碼。。。 

            if (!mTencent.isSessionValid()) 

            { 

                mTencent.login(this, "", mBaseUiListener); 

            } 

   

    } 

   

    /**

     * qq請求回調

     */ 

    private class BaseUiListener implements IUiListener { 

   

        @Override 

        public void onComplete(Object o) { 

            JSONObject response=(JSONObject)o;

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

//把請求到的參數傳給unity 

            UnityPlayer.UnitySendMessage("ThirdLoginGameobject","QQCallBack",o.toString()); 

        } 

   

        @Override 

        public void onError(UiError uiError) { 

        } 

   

        @Override 

        public void onCancel() { 

   

        } 

    } 

   

    /**

     * qq登錄頁面返回處理

     * @param requestCode

     * @param resultCode

     * @param data

     */ 

    @Override 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        Tencent.onActivityResultData(requestCode,resultCode,data,mBaseUiListener); 

    }

  然後再mainfest裏配置權限。

1

2

3

4

5

6

7

8

9

10

11

12

13

"android.permission.INTERNET">

"android.permission.ACCESS_NETWORK_STATE">

 

"com.tencent.tauth.AuthActivity" android:nohistory="true" android:launchmode="singleTask">

"android.intent.action.VIEW">

"android.intent.category.DEFAULT">

"android.intent.category.BROWSABLE">

"tencent你的AppId">

SDK_V2.0引入了AssistActivity,開發者需在androidManifest.xml中註冊。代碼如下:

1

"com.tencent.connect.common.AssistActivity" 

android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configchanges="orientation|keyboardHidden|screenSize">

  現在就可以成功拉起QQ授權頁面並登陸了。

三、微信登錄

  新建一個名爲wxapi的包和WXEntryActivity的類。

WXEntryActivity的代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

public class WXEntryActivity extends Activity implements IWXAPIEventHandler { 

    private static final String WEIXIN_ACCESS_TOKEN_KEY = "wx_access_token_key"

    private static final String WEIXIN_OPENID_KEY = "wx_openid_key"

    private static final String WEIXIN_REFRESH_TOKEN_KEY = "wx_refresh_token_key"

    public static WeChatCode mWeChatCode; 

   

    public WeChatCode getWeChatCode() { 

        return mWeChatCode; 

    } 

   

    public void setWeChatCode(WeChatCode weChatCode) { 

        mWeChatCode = weChatCode; 

    } 

   

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        // 微信事件回調接口註冊 

        MyApplication.sApi.handleIntent(getIntent(), this); 

    } 

   

    //微信組件註冊初始化 

   

     public static IWXAPI initWeiXin(Context context, @NonNull String weixin_app_id) { 

     if (TextUtils.isEmpty(weixin_app_id)) { 

     Toast.makeText(context.getApplicationContext(), "app_id 不能爲空", Toast.LENGTH_SHORT).show(); 

     } 

     IWXAPI api = WXAPIFactory.createWXAPI(context, weixin_app_id, true); 

     api.registerApp(weixin_app_id); 

     return api; 

     } 

   

    /**

     * 登錄微信

     */ 

    public static void loginWeixin(Context context, IWXAPI api, WeChatCode wechatCode) { 

        // 判斷是否安裝了微信客戶端 

//        if (!api.isWXAppInstalled()) { 

//            Toast.makeText(context.getApplicationContext(), "您還未安裝微信客戶端!", Toast.LENGTH_SHORT) 

//                    .show(); 

//            return; 

//        } 

        mWeChatCode=wechatCode; 

        // 發送授權登錄信息,來獲取code 

        SendAuth.Req req = new SendAuth.Req(); 

        // 應用的作用域,獲取個人信息 

        req.scope = "snsapi_userinfo"

        /**

         * 用於保持請求和回調的狀態,授權請求後原樣帶回給第三方

         * 爲了防止csrf攻擊(跨站請求僞造攻擊),後期改爲隨機數加session來校驗

         */ 

        req.state = "app_wechat"

        api.sendReq(req); 

    } 

   

    // 微信發送請求到第三方應用時,會回調到該方法 

    @Override 

    public void onReq(BaseReq req) { 

        switch (req.getType()) { 

            case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: 

                break

            case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: 

                break

            default

                break

        } 

    } 

   

    // 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法 

    @Override 

    public void onResp(BaseResp resp) { 

        switch (resp.errCode) { 

            // 發送成功 

            case BaseResp.ErrCode.ERR_OK: 

                // 獲取code 

                String code = ((SendAuth.Resp) resp).code; 

                mWeChatCode.getResponse(code); 

                break

        } 

    } 

   

    /**

     * 返回code的回調接口

     */ 

    public interface WeChatCode { 

        void getResponse(String code); 

    } 

}

MainActivity中添加如下代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

private static final String WEIXIN_ACCESS_TOKEN_KEY = "wx_access_token_key"

  private static final String WEIXIN_OPENID_KEY = "wx_openid_key"

  private static final String WEIXIN_REFRESH_TOKEN_KEY = "wx_refresh_token_key"

   

微信登錄  unity中調用該方法 

  public void weiLogin() { 

      WXEntryActivity.loginWeixin(MainActivity.this, MyApplication.sApi, new WXEntryActivity.WeChatCode() { 

          @Override 

          public void getResponse(String code) { 

              // 通過code獲取授權口令access_token 

              getAccessToken(code); 

              Log.i("獲取token成功",code.toString()); 

              // 從手機本地獲取存儲的授權口令信息,判斷是否存在access_token,不存在請求獲取,存在就判斷是否過期 

              String accessToken = (String) ShareUtils.getValue(MainActivity.this, WEIXIN_ACCESS_TOKEN_KEY, 

                      "none"); 

              String openid = (String) ShareUtils.getValue(MainActivity.this, WEIXIN_OPENID_KEY, ""); 

              if (!"none".equals(accessToken)) { 

                  // 有access_token,判斷是否過期有效 

                  isExpireAccessToken(accessToken, openid); 

              } else { 

                  // 沒有access_token 

                  getAccessToken(code); 

                  Log.i("獲取token成功",code.toString()); 

              } 

          } 

      }); 

      Log.i("登錄成功","aaaaaaaaaaaaaaaaaaaaaaaaaa"); 

   

  } 

   

/**

   * 微信登錄獲取授權口令

   */ 

  private void getAccessToken(String code) { 

      String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" + 

              "appid=" + AppConst.WEIXIN_APP_ID + 

              "&secret=" + AppConst.WEIXIN_APP_SECRET + 

              "&code=" + code + 

              "&grant_type=authorization_code"

      // 網絡請求獲取access_token 

      OkHttpUtils.get().url(url).build().execute(new StringCallback() { 

          @Override 

          public void onError(Call call, Exception e, int id) { 

              e.printStackTrace(); 

          } 

   

          @Override 

          public void onResponse(String response, int id) { 

              // 判斷是否獲取成功,成功則去獲取用戶信息,否則提示失敗 

              processGetAccessTokenResult(response); 

          } 

      }); 

   

  } 

   

  /**

   * 微信登錄處理獲取的授權信息結果

   *

   * @param response 授權信息結果

   */ 

  public void processGetAccessTokenResult(String response) { 

      // 驗證獲取授權口令返回的信息是否成功 

      if (validateSuccess(response)) { 

          // 使用Gson解析返回的授權口令信息 

        //  WXAccessTokenInfo tokenInfo = mGson.fromJson(response, WXAccessTokenInfo.class); 

          // 保存信息到手機本地 

        //  saveAccessInfotoLocation(tokenInfo); 

          // 獲取用戶信息 

        //  getUserInfo(tokenInfo.getAccess_token(), tokenInfo.getOpenid()); 

      } else { 

          // 授權口令獲取失敗,解析返回錯誤信息 

        //  WXErrorInfo wxErrorInfo = mGson.fromJson(response, WXErrorInfo.class); 

   

      } 

  } 

   

  /**

   *微信登錄獲取tokenInfo的WEIXIN_OPENID_KEY,WEIXIN_ACCESS_TOKEN_KEY,WEIXIN_REFRESH_TOKEN_KEY保存到shareprephence中

   * @param tokenInfo

   */ 

  private void saveAccessInfotoLocation(WXAccessTokenInfo tokenInfo) { 

      ShareUtils.saveValue(MyApplication.mContext,WEIXIN_OPENID_KEY,tokenInfo.getOpenid()); 

      ShareUtils.saveValue(MyApplication.mContext,WEIXIN_ACCESS_TOKEN_KEY,tokenInfo.getAccess_token()); 

      ShareUtils.saveValue(MyApplication.mContext,WEIXIN_REFRESH_TOKEN_KEY,tokenInfo.getRefresh_token()); 

  } 

   

  /**

   * 驗證是否成功

   *

   * @param response 返回消息

   * @return 是否成功

   */ 

  private boolean validateSuccess(String response) { 

      String errFlag = "errmsg"

      return (errFlag.contains(response) && !"ok".equals(response)) 

              || (!"errcode".contains(response) && !errFlag.contains(response)); 

  } 

   

   

  /**

   * 微信登錄判斷accesstoken是過期

   *

   * @param accessToken token

   * @param openid      授權用戶唯一標識

   */ 

  private void isExpireAccessToken(final String accessToken, final String openid) { 

      String url = "https://api.weixin.qq.com/sns/auth?" + 

              "access_token=" + accessToken + 

              "&openid=" + openid; 

      OkHttpUtils.get().url(url).build().execute(new StringCallback() { 

          @Override 

          public void onError(Call call, Exception e, int id) { 

   

          } 

   

          @Override 

          public void onResponse(String response, int id) { 

              if (validateSuccess(response)) { 

                  // accessToken沒有過期,獲取用戶信息 

                  getUserInfo(accessToken, openid);

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

               //把請求到的數據傳遞到unity 

                UnityPlayer.UnitySendMessage("與安卓交互的C#腳本掛載的物體名","函數名",response.toString()); 

                Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show(); 

   

            } else { 

                // 過期了,使用refresh_token來刷新accesstoken 

                refreshAccessToken(); 

            } 

        } 

    }); 

   

/**

 * 微信登錄刷新獲取新的access_token

 */ 

private void refreshAccessToken() { 

    // 從本地獲取以存儲的refresh_token 

    final String refreshToken = (String) ShareUtils.getValue(this, WEIXIN_REFRESH_TOKEN_KEY, 

            ""); 

    if (TextUtils.isEmpty(refreshToken)) { 

        return

    } 

    // 拼裝刷新access_token的url請求地址 

    String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?" + 

            "appid=" + AppConst.WEIXIN_APP_ID + 

            "&grant_type=refresh_token" + 

            "&refresh_token=" + refreshToken; 

    // 請求執行 

    OkHttpUtils.get().url(url).build().execute(new StringCallback() { 

        @Override 

        public void onError(Call call, Exception e, int id) { 

            System.out.println("刷新獲取新的access_token信息失敗!!!"); 

            // 重新請求授權 

            weiLogin(); 

        } 

   

        @Override 

        public void onResponse(String response, int id) { 

            // 判斷是否獲取成功,成功則去獲取用戶信息,否則提示失敗 

            processGetAccessTokenResult(response); 

        } 

    }); 

   

/**

 * 微信token驗證成功後,聯網獲取用戶信息

 * @param access_token

 * @param openid

 */ 

private void getUserInfo(String access_token, String openid) { 

    String url = "https://api.weixin.qq.com/sns/userinfo?" + 

            "access_token=" + access_token + 

            "&openid=" + openid; 

    OkHttpUtils.get().url(url).build().execute(new StringCallback() { 

        @Override 

        public void onError(Call call, Exception e, int id) { 

            System.out.println("聯網獲取用戶信息失敗!!!"); 

        } 

   

        @Override 

        public void onResponse(String response, int id) { 

            // 解析獲取的用戶信息 

           // WXUserInfo userInfo = mGson.fromJson(response, WXUserInfo.class); 

            System.out.println("獲取用戶信息String是::::::"+response); 

   

        } 

    }); 

}

  寫了一個類來存APPID和SECRET

  新建一個MyApplication類來初始化微信登錄和網絡請求

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

public class MyApplication extends Application { 

    public static IWXAPI sApi; 

    public static Context mContext; 

    @Override 

    public void onCreate() { 

        super.onCreate(); 

        mContext=this

        //初始化微信 

        sApi = WXEntryActivity.initWeiXin(this, AppConst.WEIXIN_APP_ID); 

        initOkHttp(); 

    } 

    //封裝okhttp框架的初始化配置 

    private void initOkHttp() { 

        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null); 

        CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext())); 

        OkHttpClient okHttpClient = new OkHttpClient.Builder() 

                .addInterceptor(new LoggerInterceptor("TAG")) 

                .cookieJar(cookieJar) 

                .connectTimeout(20000L, TimeUnit.MILLISECONDS) 

                .readTimeout(20000L,TimeUnit.MILLISECONDS) 

                .writeTimeout(20000L,TimeUnit.MILLISECONDS) 

                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager) 

                //其他配置 

                .build(); 

        OkHttpUtils.initClient(okHttpClient); 

    } 

}

mainfest裏初始化MyApplication

  只要填寫正確的APPID以及簽名正確,就可以拉起微信登錄頁面了。

四、微博登錄

  微博登錄不光要導入jar包,libs裏面的.so文件也要導入,這裏只講客戶端授權。

  從官方demo中複製AccessTokenKeeper這個類到你的工程中。寫一個Constance類來存APPKEY,把這三個類也從官方的demo中複製過來,下面貼上我刪減後的代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

public class WBAuthActivity extends Activity { 

   

    private static final String TAG = "weibosdk"

   

    private AuthInfo mAuthInfo; 

   

    /** 封裝了 "access_token","expires_in","refresh_token",並提供了他們的管理功能  */ 

    private Oauth2AccessToken mAccessToken; 

   

    /** 注意:SsoHandler 僅當 SDK 支持 SSO 時有效 */ 

    private SsoHandler mSsoHandler; 

   

    /**

     * @see {@link Activity#onCreate}

     */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        mAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); 

        mSsoHandler = new SsoHandler(WBAuthActivity.this, mAuthInfo); 

        // SSO 授權, 僅客戶端 

        WBLogin(); 

        // 從 SharedPreferences 中讀取上次已保存好 AccessToken 等信息, 

        // 第一次啓動本應用,AccessToken 不可用 

        mAccessToken = AccessTokenKeeper.readAccessToken(this); 

        if (mAccessToken.isSessionValid()) { 

            updateTokenView(true); 

        } 

    } 

   

    /**

     * 當 SSO 授權 Activity 退出時,該函數被調用。

     *

     * @see {@link Activity#onActivityResult}

     */ 

    @Override 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        super.onActivityResult(requestCode, resultCode, data); 

   

        // SSO 授權回調 

        // 重要:發起 SSO 登陸的 Activity 必須重寫 onActivityResults 

        // ++++++++++++++++++ 

        //如果是sso授權登陸,必須先執行下面的回調,然後纔會執行監聽器裏的 回調 

        if (mSsoHandler != null) { 

            mSsoHandler.authorizeCallBack(requestCode, resultCode, data); 

    } 

   

    } 

    private void WBLogin() 

   { 

    mSsoHandler.authorizeClientSso(new AuthListener()); 

   } 

    /**

     * 微博認證授權回調類。

     * 1. SSO 授權時,需要在 {@link #onActivityResult} 中調用 {@link SsoHandler#authorizeCallBack} 後,

     *    該回調纔會被執行。

     * 2. 非 SSO 授權時,當授權結束後,該回調就會被執行。

     * 當授權成功後,請保存該 access_token、expires_in、uid 等信息到 SharedPreferences 中。

     */ 

    class AuthListener implements WeiboAuthListener { 

   

        @Override 

        public void onComplete(Bundle values) { 

            // 從 Bundle 中解析 Token 

            mAccessToken = Oauth2AccessToken.parseAccessToken(values); 

            UnityPlayer.UnitySendMessage("ThirdLoginGameobject","WeiboCallBack",values.toString()); 

            //從這裏獲取用戶輸入的 電話號碼信息  

          //  String phoneNum =  mAccessToken.getUid(); 

            if (mAccessToken.isSessionValid()) { 

                // 顯示 Token 

                updateTokenView(false); 

   

            } else { 

                // 以下幾種情況,您不會收到 Code: 

                // 1. 當您未在平臺上註冊的應用程序的包名與簽名時; 

                // 2. 當您註冊的應用程序包名與簽名不正確時; 

                // 3. 當您在平臺上註冊的包名和簽名與您當前測試的應用的包名和簽名不匹配時。 

            } 

        } 

   

        @Override 

        public void onCancel() { 

   

        } 

   

        @Override 

        public void onWeiboException(WeiboException e) { 

   

        } 

    } 

   

    /**

     * 顯示當前 Token 信息。

     *

     * @param hasExisted 配置文件中是否已存在 token 信息並且合法

     */ 

    private void updateTokenView(boolean hasExisted) { 

   

    } 

}

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

public class WBAuthCodeActivity extends Activity { 

   

    private static final String TAG = "WBAuthCodeActivity"

   

    /**

     * WeiboSDKDemo 程序的 APP_SECRET。

     * 請注意:請務必妥善保管好自己的 APP_SECRET,不要直接暴露在程序中,此處僅作爲一個DEMO來演示。

     */ 

       

    /** 通過 code 獲取 Token 的 URL */ 

    private static final String OAUTH2_ACCESS_TOKEN_URL = "https://open.weibo.cn/oauth2/access_token"; 

       

    /** 微博 Web 授權接口類,提供登陸等功能  */ 

    private AuthInfo mAuthInfo; 

    /** 獲取到的 Code */ 

    private String mCode; 

    /** 獲取到的 Token */ 

    private Oauth2AccessToken mAccessToken; 

   

    /**

     * @see {@link Activity#onCreate}

     */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

       // setContentView(R.layout.activity_auth_code); 

   

        // 初始化微博對象 

        mAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); 

    } 

   

    /**

     * 微博認證授權回調類。

     */ 

    class AuthListener implements WeiboAuthListener { 

           

        @Override 

        public void onComplete(Bundle values) { 

            if (null == values) { 

                return

            } 

            String code = values.getString("code"); 

            if (TextUtils.isEmpty(code)) { 

                return

            } 

            mCode = code; 

        } 

   

        @Override 

        public void onCancel() { 

   

        } 

   

        @Override 

        public void onWeiboException(WeiboException e) { 

   

        } 

    } 

       

    /**

     * 異步獲取 Token。

     

     * @param authCode  授權 Code,該 Code 是一次性的,只能被獲取一次 Token

     * @param appSecret 應用程序的 APP_SECRET,請務必妥善保管好自己的 APP_SECRET,

     *                  不要直接暴露在程序中,此處僅作爲一個DEMO來演示。

     */ 

    public void fetchTokenAsync(String authCode, String appSecret) { 

           

        WeiboParameters requestParams = new WeiboParameters(Constants.APP_KEY); 

        requestParams.put(WBConstants.AUTH_PARAMS_CLIENT_ID,     Constants.APP_KEY); 

        requestParams.put(WBConstants.AUTH_PARAMS_CLIENT_SECRET, appSecret); 

        requestParams.put(WBConstants.AUTH_PARAMS_GRANT_TYPE,    "authorization_code"); 

        requestParams.put(WBConstants.AUTH_PARAMS_CODE,          authCode); 

        requestParams.put(WBConstants.AUTH_PARAMS_REDIRECT_URL,  Constants.REDIRECT_URL); 

           

        // 異步請求,獲取 Token 

        new AsyncWeiboRunner(getApplicationContext()).requestAsync(OAUTH2_ACCESS_TOKEN_URL, requestParams, "POST", new RequestListener() { 

            @Override 

            public void onComplete(String response) { 

                   

                // 獲取 Token 成功 

                Oauth2AccessToken token = Oauth2AccessToken.parseAccessToken(response); 

                if (token != null && token.isSessionValid()) { 

                       

                    mAccessToken = token; 

                    String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format( 

                            new java.util.Date(mAccessToken.getExpiresTime())); 

                    String format = token.toString(); 

                } else { 

   

                } 

            } 

   

            @Override 

            public void onWeiboException(WeiboException e) { 

   

            } 

        }); 

    } 

}

WBShareMainActivity繼承Activity爲空即可,在MainActivity的onCreate裏寫上LogUtil.sIsLogEnable = true;

MainActivity里加上微博登錄代碼

1

2

3

4

5

//微博登錄  Unity裏調用 

    public void WBLogin() 

    { 

        startActivity(new Intent(MainActivity.this, WBAuthActivity.class)); 

    }

mainfest里加上 即可。

  把MainActivity裏的代碼整合到一起後,build

  把libs裏的classes.jar刪掉,把紅框圈起來的classes.jar拖到libs文件夾裏,然後把libs,res和AndroidMainfest這三個文件拖到Unity工程的Plugins/Android文件夾下。

  然後在unity創建三個按鈕並添加點擊事件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

public void OnQQBtnClick(ButtonScript obj, object args, object param1, object param2) 

   { 

    #if UNITY_IPHONE 

        c_thirdQQLogin(); 

    #elif UNITY_ANDROID 

    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 

    AndroidJavaObject jo = jc.GetStatic("currentActivity"); 

    jo.Call("QQlogin"); 

    #endif 

   } 

   

   public void OnWeChatBtnClick(ButtonScript obj, object args, object param1, object param2) 

   { 

    #if UNITY_IPHONE 

        c_thirdLogin(); 

    #elif UNITY_ANDROID 

    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 

    AndroidJavaObject jo = jc.GetStatic("currentActivity"); 

    jo.Call("weiLogin"); 

    #endif 

   } 

   

   public void OnWeiboBtnClick(ButtonScript obj, object args, object param1, object param2) 

   { 

    #if UNITY_IPHONE 

     c_thirdWeiboLogin(); 

    #elif UNITY_ANDROID 

    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 

    AndroidJavaObject jo = jc.GetStatic("currentActivity"); 

    jo.Call("WBLogin"); 

    #endif 

          

   }

  發佈安卓應用的時候記得簽名,不然微信和微博登錄會報錯。

 

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