添加数字以响应Android本机

添加数字以响应Android本机,android,react-native,Android,React Native,有没有人成功地为react native for android配置了数字?在MainActivity.java中添加数字作为依赖项非常困难 是否有方法将其添加为带有.addPackage行的包 更新: 我已经包装了数字,但在编译时遇到了问题。 如果有人投资于此,并希望帮助我回答此问题: 非常感谢。如果你不严格按照Twitter的方式做事,那么使用Fabric是一种巨大的痛苦 以下是我的实现: DigitsPackage.java android/app/build.gradle 加 及 and

有没有人成功地为react native for android配置了数字?在MainActivity.java中添加数字作为依赖项非常困难

是否有方法将其添加为带有.addPackage行的包

更新: 我已经包装了数字,但在编译时遇到了问题。 如果有人投资于此,并希望帮助我回答此问题:
非常感谢。

如果你不严格按照Twitter的方式做事,那么使用Fabric是一种巨大的痛苦

以下是我的实现:

DigitsPackage.java android/app/build.gradle 加

android/build.gradle AndroidManifest.xml 加


我可能应该用这个和iOS版本做一个Github回购

这是在react native fabric digitsTrue的路线图中看到的。我现在正在寻找任何帮助来设置它,或者最好是一个关于使用react-native设置任何android软件包的一般教程。就像Crashlytics数字一样,对吗?您是否成功地将Crashlytics集成到您的RN应用程序中?我听说有些人有问题。如果你有建议,我很想听。我也必须尽快完成。我正在努力让它启动并运行,当我完成npm包时,我会回答。谢谢@Corentin!我希望我能早点看到你的,我最后挂断的部分是在应用程序的
android/build.gradle
中添加了maven位。我的实现有点不同,但非常相似,我将很快在Github上安装它,并附带安装说明。希望它能帮助人们开发这样的软件包。有一个问题,为什么要添加
maven{url'https://maven.fabric.io/public“}
classpath”io.fabric.tools:gradle:1.+'
buildscript
而不仅仅是到
所有项目中的repo的远程repo?好问题。。。我真的不记得了^^
package com.yourapp.rctdigits;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class DigitsPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new DigitsModule(reactContext));
        return modules;
    }

    @Override
    public List<Class<? extends JavaScriptModule>> createJSModules() {
        return Collections.emptyList();
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}
package com.yourapp.rctdigits;

import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

import com.digits.sdk.android.AuthCallback;
import com.digits.sdk.android.Digits;
import com.digits.sdk.android.DigitsClient;
import com.digits.sdk.android.DigitsException;
import com.digits.sdk.android.DigitsOAuthSigning;
import com.digits.sdk.android.DigitsSession;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableNativeMap;
import com.twitter.sdk.android.core.TwitterAuthConfig;
import com.twitter.sdk.android.core.TwitterAuthToken;
import com.twitter.sdk.android.core.TwitterCore;

import java.util.Map;

import io.fabric.sdk.android.Fabric;

public class DigitsModule extends ReactContextBaseJavaModule {
    private static final String META_DATA_KEY = "io.fabric.ApiKey";
    private static final String META_DATA_SECRET = "io.fabric.ApiSecret";
    private static final String TAG = "RCTDigits";
    volatile DigitsClient digitsClient;
    private ReactApplicationContext mContext;

    public DigitsModule(ReactApplicationContext reactContext) {
        super(reactContext);
        mContext = reactContext;
    }

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

    @ReactMethod
    public void launchAuthentication(final Callback successCallback, final Callback errorCallback) {
        TwitterAuthConfig authConfig = getTwitterConfig();
        Fabric.with(mContext, new TwitterCore(authConfig), new Digits());

        AuthCallback callback = new AuthCallback() {
            @Override
            public void success(DigitsSession session, String phoneNumber) {
                // Do something with the session and phone number
                Log.i(TAG, "authentication successful");

                TwitterAuthConfig authConfig = TwitterCore.getInstance().getAuthConfig();
                TwitterAuthToken authToken = (TwitterAuthToken) session.getAuthToken();
                DigitsOAuthSigning oauthSigning = new DigitsOAuthSigning(authConfig, authToken);
                Map<String, String> authHeaders = oauthSigning.getOAuthEchoHeadersForVerifyCredentials();
                WritableNativeMap authHeadersNativeMap = new WritableNativeMap();

                for (Map.Entry<String, String> entry : authHeaders.entrySet()) {
                    authHeadersNativeMap.putString(entry.getKey(), entry.getValue());
                }

                WritableNativeMap result = new WritableNativeMap();
                result.putMap("oAuthHeaders", authHeadersNativeMap);
                result.putString("userId", String.valueOf(session.getId()));
                result.putString("phoneNumber", session.getPhoneNumber());

                successCallback.invoke(result);
            }

            @Override
            public void failure(DigitsException exception) {
                // Do something on failure
                Log.e(TAG, "error " + exception.getMessage());
                errorCallback.invoke(exception.getMessage());
            }
        };

        int themeId = mContext.getResources().getIdentifier("CustomDigitsTheme", "style", mContext.getPackageName());
        Digits.getInstance().authenticate(callback, themeId);
    }

    private TwitterAuthConfig getTwitterConfig() {
        String key = getMetaData(META_DATA_KEY);
        String secret = getMetaData(META_DATA_SECRET);

        return new TwitterAuthConfig(key, secret);
    }

    // adapted from http://stackoverflow.com/questions/7500227/get-applicationinfo-metadata-in-oncreate-method
    private String getMetaData(String name) {
        try {
            ApplicationInfo ai = mContext.getPackageManager().getApplicationInfo(
                    mContext.getPackageName(),
                    PackageManager.GET_META_DATA
            );

            Bundle metaData = ai.metaData;
            if (metaData == null) {
                Log.w(TAG, "metaData is null. Unable to get meta data for " + name);
            } else {
                String value = metaData.getString(name);
                return value;
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Digits theme. -->
<resources>
    <style name="CustomDigitsTheme" parent="android:Theme.Holo.Light">
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:textColorSecondary">@android:color/darker_gray</item>
        <item name="android:windowBackground">@android:color/white</item>
        <item name="android:textColorLink">#ffe74c3c</item>
        <item name="android:colorAccent">#ffe74c3c</item>
    </style>
</resources>
repositories {
    maven {
        url 'https://maven.fabric.io/public'
    }
}
dependencies {
    compile('com.digits.sdk.android:digits:1.8.0@aar') {
        transitive = true;
    }
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.1'
        classpath 'io.fabric.tools:gradle:1.+'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
    }
}
  <meta-data
    android:name="io.fabric.ApiKey"
    android:value="YOUR_API_KEY" />
  <meta-data
    android:name="io.fabric.ApiSecret"
    android:value="YOUR_API_SECRET" />
var DigitsManager = require("react-native").NativeModules.DigitsManager;

DigitsManager.launchAuthentication((loginResponse) => {
    Log.debug("[Digits]", "login successful", loginResponse);
}, (error) => {
    Log.warn("[Digits]", "Login failed", error);
});