ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

react native 接入QQ登陆(Android)

2020-07-10 11:06:45  阅读:460  来源: 互联网

标签:QQ void public react promise Override new Android MyModule


<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  • 注册 Activity
<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" />

        <data android:scheme="tencent你的AppId" />
    </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="behind"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • MainActivity.java
public class MainActivity extends ReactActivity {

    static MyListener listener;
    static Tencent tencent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        tencent = Tencent.createInstance("AppId", this);
        listener = new MyListener();

    }

    private static class MyListener implements IUiListener {
        @Override
        public void onComplete(Object o) {
            JSONObject jsonObject = (JSONObject) o;
            try {
                String openid = jsonObject.getString("openid");
                WritableMap map = Arguments.createMap();
                map.putString("openid", openid);
                MyModule.promise.resolve(map);
            } catch (JSONException e) {
                MyModule.promise.reject(new Exception("操作失败"));
            }

        }

        @Override
        public void one rror(UiError uiError) {
            MyModule.promise.reject(new Exception("操作失败"));
        }

        @Override
        public void onCancel() {
            MyModule.promise.reject(new Exception("操作失败"));
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Tencent.onActivityResultData(requestCode, resultCode, data, listener);
    }
}
  • MyModule.java 原生模块,供JS调用
public class MyModule extends ReactContextBaseJavaModule {

    private static ReactApplicationContext reactApplicationContext;
    public static Promise promise;

    @NonNull
    @Override
    public String getName() {
        return "MyModule";
    }

    MyModule(@NonNull ReactApplicationContext reactContext) {
        super(reactContext);
        reactApplicationContext = reactContext;
    }

    @ReactMethod
    public void qqLogin(Promise promise) {
        MyModule.promise = promise;
        MainActivity.tencent.login(getCurrentActivity(), "all", MainActivity.listener);
    }

}
  • MyPackage.java 注册模块
public class MyPackage implements ReactPackage {
    @NonNull
    @Override
    public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new MyModule(reactContext));
        return modules;
    }

    @NonNull
    @Override
    public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}
  • JavaScript 端访问
import {
  ToastAndroid,
  NativeModules
} from 'react-native';

NativeModules.MyModule.qqLogin().then(({ openid }) => {
      ToastAndroid.show(openid, ToastAndroid.SHORT)
    }).catch(reason => {
      console.log(reason)
    })

标签:QQ,void,public,react,promise,Override,new,Android,MyModule
来源: https://www.cnblogs.com/stefzi/p/13278148.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有