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