Remove private key dependant Twitter API and non-free BillingClient API

This commit is contained in:
Javi Rueda 2020-08-28 14:29:00 +02:00
parent d054c615c3
commit 2e44ce4414
25 changed files with 0 additions and 1003 deletions

View file

@ -40,17 +40,7 @@ android {
} }
buildTypes { buildTypes {
debug {
Properties twitterProps = new Properties()
twitterProps.load(project.file('twitter.properties').newDataInputStream())
resValue "string", "TWITTER_CONSUMER_KEY", "\"${twitterProps.getProperty("twitterConsumerKey")}\""
resValue "string", "TWITTER_CONSUMER_SECRET", "\"${twitterProps.getProperty("twitterConsumerSecret")}\""
}
release { release {
Properties twitterProps = new Properties()
twitterProps.load(project.file('twitter.properties').newDataInputStream())
resValue "string", "TWITTER_CONSUMER_KEY", "\"${twitterProps.getProperty("twitterConsumerKey")}\""
resValue "string", "TWITTER_CONSUMER_SECRET", "\"${twitterProps.getProperty("twitterConsumerSecret")}\""
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
} }
@ -92,9 +82,6 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.11.0' implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.squareup.okhttp3:okhttp:4.4.1' implementation 'com.squareup.okhttp3:okhttp:4.4.1'
implementation 'com.google.oauth-client:google-oauth-client:1.30.4'
implementation 'com.android.billingclient:billing:3.0.0'
implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.google.android.exoplayer:exoplayer-core:2.11.4' implementation 'com.google.android.exoplayer:exoplayer-core:2.11.4'

View file

@ -10,7 +10,6 @@
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.vending.BILLING" />
<application <application
android:allowBackup="true" android:allowBackup="true"

View file

@ -47,13 +47,6 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.ConsumeParams;
import com.android.billingclient.api.ConsumeResponseListener;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
@ -65,8 +58,6 @@ import com.google.android.exoplayer2.ui.PlayerNotificationManager;
import com.google.android.exoplayer2.ui.PlayerView; import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.upstream.cache.Cache; import com.google.android.exoplayer2.upstream.cache.Cache;
import com.google.android.gms.cast.framework.CastContext; import com.google.android.gms.cast.framework.CastContext;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -145,13 +136,10 @@ import io.lbry.browser.model.WalletBalance;
import io.lbry.browser.model.WalletSync; import io.lbry.browser.model.WalletSync;
import io.lbry.browser.model.lbryinc.LbryNotification; import io.lbry.browser.model.lbryinc.LbryNotification;
import io.lbry.browser.model.lbryinc.Reward; import io.lbry.browser.model.lbryinc.Reward;
import io.lbry.browser.model.lbryinc.RewardVerified;
import io.lbry.browser.model.lbryinc.Subscription; import io.lbry.browser.model.lbryinc.Subscription;
import io.lbry.browser.tasks.GenericTaskHandler; import io.lbry.browser.tasks.GenericTaskHandler;
import io.lbry.browser.tasks.RewardVerifiedHandler;
import io.lbry.browser.tasks.claim.ClaimListResultHandler; import io.lbry.browser.tasks.claim.ClaimListResultHandler;
import io.lbry.browser.tasks.claim.ClaimListTask; import io.lbry.browser.tasks.claim.ClaimListTask;
import io.lbry.browser.tasks.lbryinc.AndroidPurchaseTask;
import io.lbry.browser.tasks.lbryinc.ClaimRewardTask; import io.lbry.browser.tasks.lbryinc.ClaimRewardTask;
import io.lbry.browser.tasks.lbryinc.FetchRewardsTask; import io.lbry.browser.tasks.lbryinc.FetchRewardsTask;
import io.lbry.browser.tasks.LighthouseAutoCompleteTask; import io.lbry.browser.tasks.LighthouseAutoCompleteTask;
@ -204,7 +192,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
private static final int PLAYBACK_NOTIFICATION_ID = 3; private static final int PLAYBACK_NOTIFICATION_ID = 3;
private static final String SPECIAL_URL_PREFIX = "lbry://?"; private static final String SPECIAL_URL_PREFIX = "lbry://?";
private static final int REMOTE_NOTIFICATION_REFRESH_TTL = 300000; // 5 minutes private static final int REMOTE_NOTIFICATION_REFRESH_TTL = 300000; // 5 minutes
public static final String SKU_SKIP = "lbryskip";
private Date remoteNotifcationsLastLoaded; private Date remoteNotifcationsLastLoaded;
private Map<String, Class> specialRouteFragmentClassMap; private Map<String, Class> specialRouteFragmentClassMap;
@ -228,7 +215,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
public static boolean startingPermissionRequest = false; public static boolean startingPermissionRequest = false;
public static boolean startingSignInFlowActivity = false; public static boolean startingSignInFlowActivity = false;
private BillingClient billingClient;
@Getter @Getter
private boolean enteringPIPMode = false; private boolean enteringPIPMode = false;
private boolean fullSyncInProgress = false; private boolean fullSyncInProgress = false;
@ -406,24 +392,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
Toolbar toolbar = findViewById(R.id.toolbar); Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
// setup the billing client in main activity (to handle cases where the verification purchase flow may have been interrupted)
billingClient = BillingClient.newBuilder(this)
.setListener(new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> purchases) {
int responseCode = billingResult.getResponseCode();
if (responseCode == BillingClient.BillingResponseCode.OK && purchases != null)
{
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
}
}
})
.enablePendingPurchases()
.build();
establishBillingClientConnection();
playerNotificationManager = new PlayerNotificationManager( playerNotificationManager = new PlayerNotificationManager(
this, LbrynetService.NOTIFICATION_CHANNEL_ID, PLAYBACK_NOTIFICATION_ID, new PlayerNotificationDescriptionAdapter()); this, LbrynetService.NOTIFICATION_CHANNEL_ID, PLAYBACK_NOTIFICATION_ID, new PlayerNotificationDescriptionAdapter());
@ -1055,7 +1023,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
checkPurchases();
enteringPIPMode = false; enteringPIPMode = false;
applyNavbarSigninPadding(); applyNavbarSigninPadding();
@ -1078,33 +1045,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
}*/ }*/
} }
private void checkPurchases() {
if (billingClient != null) {
Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.INAPP);
if (result.getPurchasesList() != null) {
for (Purchase purchase : result.getPurchasesList()) {
handlePurchase(purchase);
}
}
}
}
private void handlePurchase(Purchase purchase) {
handleBillingPurchase(purchase, billingClient, MainActivity.this, null, new RewardVerifiedHandler() {
@Override
public void onSuccess(RewardVerified rewardVerified) {
if (Lbryio.currentUser != null) {
Lbryio.currentUser.setRewardApproved(rewardVerified.isRewardApproved());
}
}
@Override
public void onError(Exception error) {
// pass
}
});
}
private void checkPendingOpens() { private void checkPendingOpens() {
if (pendingFollowingReload) { if (pendingFollowingReload) {
loadFollowingContent(); loadFollowingContent();
@ -2098,7 +2038,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
intentFilter.addAction(ACTION_OPEN_REWARDS_PAGE); intentFilter.addAction(ACTION_OPEN_REWARDS_PAGE);
intentFilter.addAction(ACTION_PUBLISH_SUCCESSFUL); intentFilter.addAction(ACTION_PUBLISH_SUCCESSFUL);
intentFilter.addAction(ACTION_SAVE_SHARED_USER_STATE); intentFilter.addAction(ACTION_SAVE_SHARED_USER_STATE);
intentFilter.addAction(LbrynetMessagingService.ACTION_NOTIFICATION_RECEIVED);
requestsReceiver = new BroadcastReceiver() { requestsReceiver = new BroadcastReceiver() {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
@ -2119,8 +2058,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
saveSharedUserState(); saveSharedUserState();
} else if (ACTION_PUBLISH_SUCCESSFUL.equalsIgnoreCase(action)) { } else if (ACTION_PUBLISH_SUCCESSFUL.equalsIgnoreCase(action)) {
openPublishesOnSuccessfulPublish(); openPublishesOnSuccessfulPublish();
} else if (LbrynetMessagingService.ACTION_NOTIFICATION_RECEIVED.equalsIgnoreCase(action)) {
handleNotificationReceived(intent);
} }
} }
@ -3397,53 +3334,6 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
return (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED); return (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED);
} }
private void establishBillingClientConnection() {
if (billingClient != null) {
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// no need to do anything here. purchases are always checked server-side
checkPurchases();
}
}
@Override
public void onBillingServiceDisconnected() {
establishBillingClientConnection();
}
});
}
}
public static void handleBillingPurchase(
Purchase purchase,
BillingClient billingClient,
Context context,
View progressView,
RewardVerifiedHandler handler) {
String sku = purchase.getSku();
if (SKU_SKIP.equalsIgnoreCase(sku)) {
// send purchase token for verification
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED
/*&& isSignatureValid(purchase)*/) {
// consume the purchase
String purchaseToken = purchase.getPurchaseToken();
ConsumeParams consumeParams = ConsumeParams.newBuilder().setPurchaseToken(purchaseToken).build();
billingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
@Override
public void onConsumeResponse(@NonNull BillingResult billingResult, @NonNull String s) {
}
});
// send the purchase token to the backend to complete verification
AndroidPurchaseTask task = new AndroidPurchaseTask(purchaseToken, progressView, context, handler);
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
}
public interface BackPressInterceptor { public interface BackPressInterceptor {
boolean onBackPressed(); boolean onBackPressed();
} }

View file

@ -10,25 +10,12 @@ import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.widget.ViewPager2; import androidx.viewpager2.widget.ViewPager2;
import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import io.lbry.browser.adapter.VerificationPagerAdapter; import io.lbry.browser.adapter.VerificationPagerAdapter;
import io.lbry.browser.listener.SignInListener; import io.lbry.browser.listener.SignInListener;
@ -48,59 +35,11 @@ public class VerificationActivity extends FragmentActivity implements SignInList
public static final int VERIFICATION_FLOW_REWARDS = 2; public static final int VERIFICATION_FLOW_REWARDS = 2;
public static final int VERIFICATION_FLOW_WALLET = 3; public static final int VERIFICATION_FLOW_WALLET = 3;
private BillingClient billingClient;
private BroadcastReceiver sdkReceiver; private BroadcastReceiver sdkReceiver;
private String email; private String email;
private boolean signedIn; private boolean signedIn;
private int flow; private int flow;
private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
@Override
public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> purchases) {
int responseCode = billingResult.getResponseCode();
if (responseCode == BillingClient.BillingResponseCode.OK && purchases != null)
{
for (Purchase purchase : purchases) {
if (MainActivity.SKU_SKIP.equalsIgnoreCase(purchase.getSku())) {
showLoading();
MainActivity.handleBillingPurchase(
purchase,
billingClient,
VerificationActivity.this, null, new RewardVerifiedHandler() {
@Override
public void onSuccess(RewardVerified rewardVerified) {
if (Lbryio.currentUser != null) {
Lbryio.currentUser.setRewardApproved(rewardVerified.isRewardApproved());
}
if (!rewardVerified.isRewardApproved()) {
// show pending purchase message (possible slow card tx)
Snackbar.make(findViewById(R.id.verification_pager), R.string.purchase_request_pending, Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(findViewById(R.id.verification_pager), R.string.reward_verification_successful, Snackbar.LENGTH_LONG).show();
}
setResult(RESULT_OK);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
}, 3000);
}
@Override
public void onError(Exception error) {
showFetchUserError(getString(R.string.purchase_request_failed_error));
hideLoading();
}
});
}
}
}
}
};
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -137,12 +76,6 @@ public class VerificationActivity extends FragmentActivity implements SignInList
}; };
registerReceiver(sdkReceiver, filter); registerReceiver(sdkReceiver, filter);
billingClient = BillingClient.newBuilder(this)
.setListener(purchasesUpdatedListener)
.enablePendingPurchases()
.build();
establishBillingClientConnection();
setContentView(R.layout.activity_verification); setContentView(R.layout.activity_verification);
ViewPager2 viewPager = findViewById(R.id.verification_pager); ViewPager2 viewPager = findViewById(R.id.verification_pager);
viewPager.setUserInputEnabled(false); viewPager.setUserInputEnabled(false);
@ -159,24 +92,6 @@ public class VerificationActivity extends FragmentActivity implements SignInList
}); });
} }
private void establishBillingClientConnection() {
if (billingClient != null) {
billingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
// no need to do anything here. purchases are always checked server-side
}
}
@Override
public void onBillingServiceDisconnected() {
establishBillingClientConnection();
}
});
}
}
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
LbryAnalytics.setCurrentScreen(this, "Verification", "Verification"); LbryAnalytics.setCurrentScreen(this, "Verification", "Verification");
@ -385,28 +300,6 @@ public class VerificationActivity extends FragmentActivity implements SignInList
@Override @Override
public void onSkipQueueAction() { public void onSkipQueueAction() {
if (billingClient != null) {
List<String> skuList = new ArrayList<>();
skuList.add(MainActivity.SKU_SKIP);
SkuDetailsParams detailsParams = SkuDetailsParams.newBuilder().
setType(BillingClient.SkuType.INAPP).
setSkusList(skuList).build();
billingClient.querySkuDetailsAsync(detailsParams, new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List<SkuDetails> list) {
if (list != null && list.size() > 0) {
// we only queried one product, so it should be the first item in the list
SkuDetails skuDetails = list.get(0);
// launch the billing flow for skip queue
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder().
setSkuDetails(skuDetails).build();
billingClient.launchBillingFlow(VerificationActivity.this, billingFlowParams);
}
}
});
}
} }
@Override @Override

View file

@ -1,9 +0,0 @@
package io.lbry.browser.model;
import lombok.Data;
@Data
public class TwitterOauth {
private String oauthToken;
private String oauthTokenSecret;
}

View file

@ -1,8 +0,0 @@
package io.lbry.browser.tasks;
import io.lbry.browser.model.TwitterOauth;
public interface TwitterOauthHandler {
void onSuccess(TwitterOauth twitterOauth);
void onError(Exception error);
}

View file

@ -1,68 +0,0 @@
package io.lbry.browser.tasks.lbryinc;
import android.content.Context;
import android.os.AsyncTask;
import android.view.View;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import io.lbry.browser.MainActivity;
import io.lbry.browser.model.lbryinc.RewardVerified;
import io.lbry.browser.tasks.RewardVerifiedHandler;
import io.lbry.browser.utils.Helper;
import io.lbry.browser.utils.Lbryio;
import okhttp3.Response;
public class AndroidPurchaseTask extends AsyncTask<Void, Void, RewardVerified> {
private Context context;
private View progressView;
private String purchaseToken;
private RewardVerifiedHandler handler;
private Exception error;
public AndroidPurchaseTask(String purchaseToken, View progressView, Context context, RewardVerifiedHandler handler) {
this.purchaseToken = purchaseToken;
this.progressView = progressView;
this.context = context;
this.handler = handler;
}
protected void onPreExecute() {
Helper.setViewVisibility(progressView, View.VISIBLE);
}
protected RewardVerified doInBackground(Void... params) {
try {
Map<String, String> options = new HashMap<>();
options.put("purchase_token", purchaseToken);
JSONObject object = (JSONObject) Lbryio.parseResponse(Lbryio.call("verification", "android_purchase", options, context));
Type type = new TypeToken<RewardVerified>(){}.getType();
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
return gson.fromJson(object.toString(), type);
} catch (Exception ex) {
error = ex;
return null;
}
}
protected void onPostExecute(RewardVerified result) {
Helper.setViewVisibility(progressView, View.GONE);
if (handler != null) {
if (result != null) {
handler.onSuccess(result);
} else {
handler.onError(error);
}
}
}
}

View file

@ -1,68 +0,0 @@
package io.lbry.browser.tasks.lbryinc;
import android.content.Context;
import android.os.AsyncTask;
import android.view.View;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import org.json.JSONObject;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import io.lbry.browser.model.TwitterOauth;
import io.lbry.browser.model.lbryinc.RewardVerified;
import io.lbry.browser.tasks.RewardVerifiedHandler;
import io.lbry.browser.utils.Helper;
import io.lbry.browser.utils.Lbryio;
public class TwitterVerifyTask extends AsyncTask<Void, Void, RewardVerified> {
private Context context;
private View progressView;
private TwitterOauth twitterOauth;
private RewardVerifiedHandler handler;
private Exception error;
public TwitterVerifyTask(TwitterOauth twitterOauth, View progressView, Context context, RewardVerifiedHandler handler) {
this.twitterOauth = twitterOauth;
this.progressView = progressView;
this.context = context;
this.handler = handler;
}
protected void onPreExecute() {
Helper.setViewVisibility(progressView, View.VISIBLE);
}
protected RewardVerified doInBackground(Void... params) {
try {
Map<String, String> options = new HashMap<>();
options.put("oauth_token", twitterOauth.getOauthToken());
options.put("oauth_token_secret", twitterOauth.getOauthTokenSecret());
JSONObject object = (JSONObject) Lbryio.parseResponse(Lbryio.call("verification", "twitter_verify", options, context));
Type type = new TypeToken<RewardVerified>(){}.getType();
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
return gson.fromJson(object.toString(), type);
} catch (Exception ex) {
error = ex;
return null;
}
}
protected void onPostExecute(RewardVerified result) {
Helper.setViewVisibility(progressView, View.GONE);
if (handler != null) {
if (result != null) {
handler.onSuccess(result);
} else {
handler.onError(error);
}
}
}
}

View file

@ -1,68 +0,0 @@
package io.lbry.browser.tasks.verification;
import android.os.AsyncTask;
import com.google.api.client.auth.oauth.OAuthHmacSigner;
import com.google.api.client.auth.oauth.OAuthParameters;
import com.google.api.client.http.GenericUrl;
import io.lbry.browser.VerificationActivity;
import io.lbry.browser.model.TwitterOauth;
import io.lbry.browser.tasks.TwitterOauthHandler;
import io.lbry.browser.utils.Helper;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class TwitterAccessTokenTask extends AsyncTask<Void, Void, String> {
private static final String ENDPOINT = "https://api.twitter.com/oauth/access_token";
private Exception error;
private String oauthParams;
private TwitterOauthHandler handler;
public TwitterAccessTokenTask(String oauthParams, TwitterOauthHandler handler) {
this.oauthParams = oauthParams;
this.handler = handler;
}
public String doInBackground(Void... params) {
try {
String url = String.format("%s?%s", ENDPOINT, oauthParams);
RequestBody body = RequestBody.create(new byte[0]);
Request request = new Request.Builder().url(url).post(body).build();
OkHttpClient client = new OkHttpClient.Builder().build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch (Exception ex) {
error = ex;
return null;
}
}
protected void onPostExecute(String response) {
if (!Helper.isNullOrEmpty(response)) {
String[] pairs = response.split("&");
TwitterOauth twitterOauth = new TwitterOauth();
for (String pair : pairs) {
String[] parts = pair.split("=");
if (parts.length != 2) {
continue;
}
String key = parts[0];
String value = parts[1];
if ("oauth_token".equalsIgnoreCase(key)) {
twitterOauth.setOauthToken(value);
} else if ("oauth_token_secret".equalsIgnoreCase(key)) {
twitterOauth.setOauthTokenSecret(value);
}
}
handler.onSuccess(twitterOauth);
} else {
handler.onError(error);
}
}
}

View file

@ -1,88 +0,0 @@
package io.lbry.browser.tasks.verification;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Base64;
import com.google.api.client.auth.oauth.OAuthHmacSigner;
import com.google.api.client.auth.oauth.OAuthParameters;
import com.google.api.client.http.GenericUrl;
import java.nio.charset.StandardCharsets;
import io.lbry.browser.VerificationActivity;
import io.lbry.browser.model.TwitterOauth;
import io.lbry.browser.tasks.TwitterOauthHandler;
import io.lbry.browser.utils.Helper;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class TwitterRequestTokenTask extends AsyncTask<Void, Void, String> {
private static final String ENDPOINT = "https://api.twitter.com/oauth/request_token";
private String consumerKey;
private String consumerSecret;
private Exception error;
private TwitterOauthHandler handler;
public TwitterRequestTokenTask(String consumerKey, String consumerSecret, TwitterOauthHandler handler) {
this.consumerKey = consumerKey;
this.consumerSecret = consumerSecret;
this.handler = handler;
}
public String doInBackground(Void... params) {
try {
OAuthHmacSigner signer = new OAuthHmacSigner();
signer.clientSharedSecret = new String(
Base64.decode(consumerSecret, Base64.NO_WRAP), StandardCharsets.UTF_8.name());
OAuthParameters oauthParams = new OAuthParameters();
oauthParams.callback = "https://lbry.tv";
oauthParams.consumerKey = new String(
Base64.decode(consumerKey, Base64.NO_WRAP), StandardCharsets.UTF_8.name());;
oauthParams.signatureMethod = "HMAC-SHA-1";
oauthParams.signer = signer;
oauthParams.computeNonce();
oauthParams.computeTimestamp();
oauthParams.computeSignature("POST", new GenericUrl(ENDPOINT));
RequestBody body = RequestBody.create(new byte[0]);
Request request = new Request.Builder().url(ENDPOINT).addHeader(
"Authorization", oauthParams.getAuthorizationHeader()).post(body).build();
OkHttpClient client = new OkHttpClient.Builder().build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch (Exception ex) {
error = ex;
return null;
}
}
protected void onPostExecute(String response) {
if (!Helper.isNullOrEmpty(response)) {
String[] pairs = response.split("&");
TwitterOauth twitterOauth = new TwitterOauth();
for (String pair : pairs) {
String[] parts = pair.split("=");
if (parts.length != 2) {
continue;
}
String key = parts[0];
String value = parts[1];
if ("oauth_token".equalsIgnoreCase(key)) {
twitterOauth.setOauthToken(value);
} else if ("oauth_token_secret".equalsIgnoreCase(key)) {
twitterOauth.setOauthTokenSecret(value);
}
}
handler.onSuccess(twitterOauth);
} else {
handler.onError(error);
}
}
}

View file

@ -1,74 +1,26 @@
package io.lbry.browser.ui.verification; package io.lbry.browser.ui.verification;
import android.content.Context;
import android.graphics.Color;
import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.snackbar.Snackbar;
import io.lbry.browser.R; import io.lbry.browser.R;
import io.lbry.browser.listener.SignInListener; import io.lbry.browser.listener.SignInListener;
import io.lbry.browser.model.TwitterOauth;
import io.lbry.browser.model.lbryinc.RewardVerified;
import io.lbry.browser.tasks.RewardVerifiedHandler;
import io.lbry.browser.tasks.TwitterOauthHandler;
import io.lbry.browser.tasks.lbryinc.TwitterVerifyTask;
import io.lbry.browser.tasks.verification.TwitterAccessTokenTask;
import io.lbry.browser.tasks.verification.TwitterRequestTokenTask;
import io.lbry.browser.utils.Helper; import io.lbry.browser.utils.Helper;
import io.lbry.browser.utils.Lbryio;
import lombok.Setter; import lombok.Setter;
public class ManualVerificationFragment extends Fragment { public class ManualVerificationFragment extends Fragment {
@Setter @Setter
private SignInListener listener; private SignInListener listener;
private PopupWindow popup;
private View mainView;
private View loadingView;
private TwitterOauth currentOauth;
private boolean twitterOauthInProgress = false;
private static final double SKIP_QUEUE_PRICE = 4.99;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_verification_manual, container, false); View root = inflater.inflate(R.layout.fragment_verification_manual, container, false);
mainView = root.findViewById(R.id.verification_manual_main);
loadingView = root.findViewById(R.id.verification_manual_loading);
Context context = getContext();
MaterialButton buttonSkipQueue = root.findViewById(R.id.verification_manual_skip_queue);
buttonSkipQueue.setText(context.getString(R.string.skip_queue_button_text, String.valueOf(SKIP_QUEUE_PRICE)));
Helper.applyHtmlForTextView(root.findViewById(R.id.verification_manual_discord_verify)); Helper.applyHtmlForTextView(root.findViewById(R.id.verification_manual_discord_verify));
root.findViewById(R.id.verification_manual_twitter_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// start twitter verification
if (currentOauth != null) {
// Twitter three-legged oauth already completed, verify directly
twitterVerify(currentOauth);
} else {
// show twitter sign-in flow
twitterVerificationFlow();
}
}
});
root.findViewById(R.id.verification_manual_continue_button).setOnClickListener(new View.OnClickListener() { root.findViewById(R.id.verification_manual_continue_button).setOnClickListener(new View.OnClickListener() {
@Override @Override
@ -79,205 +31,6 @@ public class ManualVerificationFragment extends Fragment {
} }
}); });
root.findViewById(R.id.verification_manual_skip_queue).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null) {
listener.onSkipQueueAction();
}
}
});
return root; return root;
} }
private void twitterVerificationFlow() {
twitterOauthInProgress = true;
if (listener != null) {
listener.onManualProgress(twitterOauthInProgress);
}
showLoading();
String consumerKey = getResources().getString(R.string.TWITTER_CONSUMER_KEY);
String consumerSecret = getResources().getString(R.string.TWITTER_CONSUMER_SECRET);
TwitterRequestTokenTask task = new TwitterRequestTokenTask(consumerKey, consumerSecret, new TwitterOauthHandler() {
@Override
public void onSuccess(TwitterOauth twitterOauth) {
twitterOauthInProgress = false;
if (listener != null) {
listener.onManualProgress(twitterOauthInProgress);
}
showTwitterAuthenticateWithToken(twitterOauth.getOauthToken());
}
@Override
public void onError(Exception error) {
handleFlowError(null);
}
});
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
public void showLoading() {
Helper.setViewVisibility(mainView, View.INVISIBLE);
Helper.setViewVisibility(loadingView, View.VISIBLE);
}
public void hideLoading() {
Helper.setViewVisibility(mainView, View.VISIBLE);
Helper.setViewVisibility(loadingView, View.GONE);
}
private void showTwitterAuthenticateWithToken(String oauthToken) {
Context context = getContext();
if (context != null) {
WebView webView = new WebView(context);
webView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
webView.loadUrl(String.format("https://api.twitter.com/oauth/authorize?oauth_token=%s", oauthToken));
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("https://lbry.tv") || url.equalsIgnoreCase("https://twitter.com/home") /* Return to Twitter */) {
if (url.startsWith("https://lbry.tv") && url.contains("oauth_token") && url.contains("oauth_verifier")) {
// finish 3-legged oauth
twitterOauthInProgress = true;
listener.onManualProgress(twitterOauthInProgress);
finishTwitterOauth(url);
}
if (popup != null) {
popup.dismiss();
}
return false;
}
view.loadUrl(url);
return true;
}
});
View popupView = LayoutInflater.from(context).inflate(R.layout.popup_webview, null);
((LinearLayout) popupView.findViewById(R.id.popup_webivew_container)).addView(webView);
popupView.findViewById(R.id.popup_cancel_button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (!twitterOauthInProgress && popup != null) {
popup.dismiss();
hideLoading();
}
}
});
float scale = getResources().getDisplayMetrics().density;
popup = new PopupWindow(context);
popup.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
if (!twitterOauthInProgress) {
hideLoading();
}
popup = null;
}
});
popup.setWidth(Helper.getScaledValue(340, scale));
popup.setHeight(Helper.getScaledValue(480, scale));
popup.setContentView(popupView);
View parent = getView();
popup.setFocusable(true);
popup.showAtLocation(parent, Gravity.CENTER, 0, 0);
popup.update();
}
}
private void finishTwitterOauth(String callbackUrl) {
String params = callbackUrl.substring(callbackUrl.indexOf('?') + 1);
TwitterAccessTokenTask task = new TwitterAccessTokenTask(params, new TwitterOauthHandler() {
@Override
public void onSuccess(TwitterOauth twitterOauth) {
// send request to finish verifying
currentOauth = twitterOauth;
twitterVerify(twitterOauth);
}
@Override
public void onError(Exception error) {
handleFlowError(null);
}
});
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private void twitterVerify(TwitterOauth twitterOauth) {
Context context = getContext();
if (context != null) {
showLoading();
twitterOauthInProgress = true;
if (listener != null) {
listener.onManualProgress(twitterOauthInProgress);
}
TwitterVerifyTask task = new TwitterVerifyTask(twitterOauth, null, context, new RewardVerifiedHandler() {
@Override
public void onSuccess(RewardVerified rewardVerified) {
twitterOauthInProgress = false;
if (listener != null) {
listener.onManualProgress(twitterOauthInProgress);
}
if (Lbryio.currentUser != null) {
Lbryio.currentUser.setRewardApproved(rewardVerified.isRewardApproved());
}
if (rewardVerified.isRewardApproved()) {
if (listener != null) {
listener.onTwitterVerified();
}
} else {
View root = getView();
if (root != null) {
// reward approved wasn't set to true
Snackbar.make(root, getString(R.string.twitter_verification_not_approved), Snackbar.LENGTH_LONG).
setTextColor(Color.WHITE).
setBackgroundTint(Color.RED).show();
}
hideLoading();
}
}
@Override
public void onError(Exception error) {
handleFlowError(error != null ? error.getMessage() : null);
}
});
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
twitterOauthInProgress = false;
if (listener != null) {
listener.onManualProgress(twitterOauthInProgress);
}
hideLoading();
}
}
private void handleFlowError(String extra) {
hideLoading();
twitterOauthInProgress = false;
if (listener != null) {
listener.onManualProgress(twitterOauthInProgress);
}
showFlowError(extra);
}
private void showFlowError(String extra) {
Context context = getContext();
View root = getView();
if (context != null && root != null) {
String message = !Helper.isNullOrEmpty(extra) ?
getString(R.string.twitter_account_ineligible, extra) :
getString(R.string.twitter_verification_failed);
Snackbar.make(root, message, Snackbar.LENGTH_LONG).
setTextColor(Color.WHITE).
setBackgroundTint(Color.RED).show();
}
}
} }

View file

@ -31,70 +31,6 @@
android:text="@string/reward_verification" android:text="@string/reward_verification"
android:textColor="@color/white" android:textColor="@color/white"
android:textFontWeight="300" /> android:textFontWeight="300" />
<TextView
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/inter"
android:text="@string/get_instantly_verified"
android:textColor="@color/white"
android:textFontWeight="300" />
<TextView
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:fontFamily="@font/inter"
android:text="@string/twitter_verification"
android:textColor="@color/white"
android:textFontWeight="300" />
<TextView
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:fontFamily="@font/inter"
android:text="@string/twitter_verification_desc"
android:textColor="@color/white"
android:textFontWeight="300" />
<com.google.android.material.button.MaterialButton
android:id="@+id/verification_manual_twitter_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:fontFamily="@font/inter"
android:text="@string/twitter_verify" />
<TextView
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:fontFamily="@font/inter"
android:text="@string/skip_queue_verification"
android:textColor="@color/white"
android:textFontWeight="300" />
<TextView
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:fontFamily="@font/inter"
android:text="@string/skip_queue_verification_desc"
android:textColor="@color/white"
android:textFontWeight="300" />
<com.google.android.material.button.MaterialButton
android:id="@+id/verification_manual_skip_queue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:fontFamily="@font/inter"
android:text="@string/skip_queue_button_text" />
<TextView <TextView
android:textSize="20sp" android:textSize="20sp"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -423,16 +423,7 @@
<string name="not_interested">No m\'interessa</string> <string name="not_interested">No m\'interessa</string>
<string name="manual_reward_verification">Verificació de recompenses manual</string> <string name="manual_reward_verification">Verificació de recompenses manual</string>
<string name="reward_verification">Verificació de recompenses</string> <string name="reward_verification">Verificació de recompenses</string>
<string name="social_media_verification">Verificació de xarxes socials</string>
<string name="skip_the_queue">Salta\'t la cua</string>
<string name="skip_queue_button_text">Salta-te-la per %1$s$</string>
<string name="account_undergo_review">Aquest compte ha de passar per una revissió abans que puguis participar en el programa de recompenses. Això pot trigar des d\'uns minuts fins a alguns dies.</string> <string name="account_undergo_review">Aquest compte ha de passar per una revissió abans que puguis participar en el programa de recompenses. Això pot trigar des d\'uns minuts fins a alguns dies.</string>
<string name="get_instantly_verified">Et pots verificar instantàniament per poder participar en el programa de recompenses emprant el teu compte de Twitter, o saltant-te la cua de la verificació manual.</string>
<string name="twitter_verification">Verificació mitjançant Twitter</string>
<string name="twitter_verification_desc">Pots verificar-te instantàniament emprant el teu compte de Twitter. La teva direcció de correu electrònic amb Twitter ha de coincidir amb la direcció que has proveït, i el teu compte ha d\'estar actiu.</string>
<string name="twitter_verify">Verifica mitjançant Twitter</string>
<string name="skip_queue_verification">Salta\'t la cua</string>
<string name="skip_queue_verification_desc">Salta\'t la verificació manual pagant una quota per tal de participar en el programa de recompenses immediatament.</string>
<string name="request_to_be_verified">Sisplau, demana que et verifiquin al &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;servidor de Discord de LBRY&lt;/a&gt;. Una verificació manual pot trigar des d\'alguns minuts fins a diversos dies.</string> <string name="request_to_be_verified">Sisplau, demana que et verifiquin al &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;servidor de Discord de LBRY&lt;/a&gt;. Una verificació manual pot trigar des d\'alguns minuts fins a diversos dies.</string>
<string name="enjoy_free_content">Gaudeix del contingut gratis mentrestant!</string> <string name="enjoy_free_content">Gaudeix del contingut gratis mentrestant!</string>
<string name="verify_phone_number">Verifica el número de telèfon</string> <string name="verify_phone_number">Verifica el número de telèfon</string>
@ -444,9 +435,6 @@
<string name="fetch_current_user_error">El compte d\'usuari no s\'ha pogut recuperar. Sisplau, torna a internar-ho més tard.</string> <string name="fetch_current_user_error">El compte d\'usuari no s\'ha pogut recuperar. Sisplau, torna a internar-ho més tard.</string>
<string name="purchase_request_pending">La teva petició de compra encara s\'està processant. Sisplau, envia\'ns un correu a support@lbry.com.</string> <string name="purchase_request_pending">La teva petició de compra encara s\'està processant. Sisplau, envia\'ns un correu a support@lbry.com.</string>
<string name="purchase_request_failed_error">La teva petició de compra no s\'ha pogut completar en aquest moment. Sisplau, envia\'ns un correu a support@lbry.com</string> <string name="purchase_request_failed_error">La teva petició de compra no s\'ha pogut completar en aquest moment. Sisplau, envia\'ns un correu a support@lbry.com</string>
<string name="twitter_account_ineligible">El teu compte de Twitter no és elegible en aquest moment: %1$s</string>
<string name="twitter_verification_not_approved">El teu compte no ha estat aprovat pel programa de recompenses. Sisplau, torna a provar-ho més tard.</string>
<string name="twitter_verification_failed">La verificació mitjançant Twitter ha fallat. Sisplau, torna a intentar-ho més tard.</string>
<string name="reward_verification_successful">Ets elegible per participar en el programa de recompenses!</string> <string name="reward_verification_successful">Ets elegible per participar en el programa de recompenses!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -423,16 +423,7 @@
<string name="not_interested">Pas intéressé</string> <string name="not_interested">Pas intéressé</string>
<string name="manual_reward_verification">Vérification manuelle des récompenses</string> <string name="manual_reward_verification">Vérification manuelle des récompenses</string>
<string name="reward_verification">Vérification des récompenses</string> <string name="reward_verification">Vérification des récompenses</string>
<string name="social_media_verification">Vérification des réseaux sociaux</string>
<string name="skip_the_queue">Passer la file d\'attente</string>
<string name="skip_queue_button_text">Passer pour $%1$s</string>
<string name="account_undergo_review">Ce compte doit être examiné avant de pouvoir participer au programme de récompenses. Cela peut prendre de quelques minutes à plusieurs jours.</string> <string name="account_undergo_review">Ce compte doit être examiné avant de pouvoir participer au programme de récompenses. Cela peut prendre de quelques minutes à plusieurs jours.</string>
<string name="get_instantly_verified">Vous pouvez être instantanément vérifié pour pouvoir participer au programme de récompenses en utilisant votre compte Twitter ou en sautant la file d\'attente de vérification manuelle.</string>
<string name="twitter_verification">Vérification Twitter</string>
<string name="twitter_verification_desc">Soyez instantanément vérifié en utilisant votre compte Twitter. Votre adresse e-mail Twitter doit correspondre à l\'e-mail que vous avez fourni et votre compte doit être actif.</string>
<string name="twitter_verify">Vérifier avec Twitter</string>
<string name="skip_queue_verification">Passer la file d\'attente</string>
<string name="skip_queue_verification_desc">Évitez la file d\'attente de vérification manuelle en payant des frais afin de commencer immédiatement à participer au programme de récompenses.</string>
<string name="request_to_be_verified">Veuillez demander à être vérifié sur le &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;Une révision manuelle peut durer de quelques minutes à plusieurs jours./a&gt;. </string> <string name="request_to_be_verified">Veuillez demander à être vérifié sur le &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;Une révision manuelle peut durer de quelques minutes à plusieurs jours./a&gt;. </string>
<string name="enjoy_free_content">Veuillez profiter du contenu gratuit en attendant!</string> <string name="enjoy_free_content">Veuillez profiter du contenu gratuit en attendant!</string>
<string name="verify_phone_number">Vérifier le numéro de téléphone</string> <string name="verify_phone_number">Vérifier le numéro de téléphone</string>
@ -444,9 +435,6 @@
<string name="fetch_current_user_error">Le compte utilisateur n\'a pas pu être récupéré pour le moment. Veuillez réessayer plus tard.</string> <string name="fetch_current_user_error">Le compte utilisateur n\'a pas pu être récupéré pour le moment. Veuillez réessayer plus tard.</string>
<string name="purchase_request_pending">Votre demande d\'achat est toujours en cours de traitement. Veuillez envoyer un e-mail à support@lbry.com.</string> <string name="purchase_request_pending">Votre demande d\'achat est toujours en cours de traitement. Veuillez envoyer un e-mail à support@lbry.com.</string>
<string name="purchase_request_failed_error">Votre demande d\'achat n\'a pas pu être traitée pour le moment. Veuillez envoyer un e-mail à support@lbry.com.</string> <string name="purchase_request_failed_error">Votre demande d\'achat n\'a pas pu être traitée pour le moment. Veuillez envoyer un e-mail à support@lbry.com.</string>
<string name="twitter_account_ineligible">Votre compte Twitter n\'est pas éligible pour le moment:%1$s</string>
<string name="twitter_verification_not_approved">Votre compte n\'a pas été approuvé pour le programme de récompenses. Veuillez réessayer plus tard.</string>
<string name="twitter_verification_failed">La vérification Twitter a échoué. Veuillez réessayer plus tard.</string>
<string name="reward_verification_successful">Vous êtes désormais éligible pour participer au programme de récompenses!</string> <string name="reward_verification_successful">Vous êtes désormais éligible pour participer au programme de récompenses!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -412,16 +412,7 @@
<string name="not_interested">Tidak tertarik</string> <string name="not_interested">Tidak tertarik</string>
<string name="manual_reward_verification">Verifikasi Hadiah Manual</string> <string name="manual_reward_verification">Verifikasi Hadiah Manual</string>
<string name="reward_verification">Verifikasi Hadiah</string> <string name="reward_verification">Verifikasi Hadiah</string>
<string name="social_media_verification">Verifikasi Media Sosial</string>
<string name="skip_the_queue">Lewati Antrian</string>
<string name="skip_queue_button_text">Lewati untuk $%1$s</string>
<string name="account_undergo_review">Akun ini harus menjalani peninjauan sebelum Anda dapat berpartisipasi dalam program hadiah. Ini bisa memakan waktu mulai dari beberapa menit hingga beberapa hari.</string> <string name="account_undergo_review">Akun ini harus menjalani peninjauan sebelum Anda dapat berpartisipasi dalam program hadiah. Ini bisa memakan waktu mulai dari beberapa menit hingga beberapa hari.</string>
<string name="get_instantly_verified">Anda dapat langsung diverifikasi untuk dapat berpartisipasi dalam program hadiah menggunakan akun Twitter Anda atau melewati antrean verifikasi manual.</string>
<string name="twitter_verification">Verifikasi Twitter</string>
<string name="twitter_verification_desc">Dapatkan verifikasi langsung menggunakan akun Twitter Anda. Alamat email Twitter Anda harus sama dengan email yang Anda berikan dan akun Anda harus aktif.</string>
<string name="twitter_verify">Verifikasi dengan Twitter</string>
<string name="skip_queue_verification">Lewati Antrian</string>
<string name="skip_queue_verification_desc">Lewati antrean verifikasi manual dengan membayar biaya untuk segera mulai berpartisipasi dalam program hadiah.</string>
<string name="request_to_be_verified">Silakan meminta untuk diverifikasi di &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;.Peninjauan manual dapat berlangsung dari beberapa menit hingga beberapa hari.</string> <string name="request_to_be_verified">Silakan meminta untuk diverifikasi di &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;.Peninjauan manual dapat berlangsung dari beberapa menit hingga beberapa hari.</string>
<string name="enjoy_free_content">Silakan nikmati konten gratis sementara itu!</string> <string name="enjoy_free_content">Silakan nikmati konten gratis sementara itu!</string>
<string name="verify_phone_number">Verifikasi Nomor Telepon</string> <string name="verify_phone_number">Verifikasi Nomor Telepon</string>
@ -433,9 +424,6 @@
<string name="fetch_current_user_error">Akun pengguna tidak dapat diambil saat ini. Silakan coba lagi nanti.</string> <string name="fetch_current_user_error">Akun pengguna tidak dapat diambil saat ini. Silakan coba lagi nanti.</string>
<string name="purchase_request_pending">Permintaan pembelian Anda masih diproses. Silakan kirim email ke support@lbry.com.</string> <string name="purchase_request_pending">Permintaan pembelian Anda masih diproses. Silakan kirim email ke support@lbry.com.</string>
<string name="purchase_request_failed_error">Permintaan pembelian Anda tidak dapat diselesaikan saat ini. Silakan kirim email ke support@lbry.com.</string> <string name="purchase_request_failed_error">Permintaan pembelian Anda tidak dapat diselesaikan saat ini. Silakan kirim email ke support@lbry.com.</string>
<string name="twitter_account_ineligible">Akun Twitter Anda tidak memenuhi syarat untuk saat ini:%1$s</string>
<string name="twitter_verification_not_approved">Akun Anda tidak disetujui untuk program hadiah. Silakan coba lagi nanti.</string>
<string name="twitter_verification_failed">Verifikasi Twitter gagal. Silakan coba lagi nanti.</string>
<string name="reward_verification_successful">Sekarang Anda berhak untuk berpartisipasi dalam program hadiah!</string> <string name="reward_verification_successful">Sekarang Anda berhak untuk berpartisipasi dalam program hadiah!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -412,16 +412,7 @@
<string name="not_interested">Ora kasengsem</string> <string name="not_interested">Ora kasengsem</string>
<string name="manual_reward_verification">Verifikasi Hadiah Manual</string> <string name="manual_reward_verification">Verifikasi Hadiah Manual</string>
<string name="reward_verification">Verifikasino Hadiahe</string> <string name="reward_verification">Verifikasino Hadiahe</string>
<string name="social_media_verification">Verifikasino Media Sosial</string>
<string name="skip_the_queue">Nglewati ing Antrian</string>
<string name="skip_queue_button_text">Mlebet $%1$s</string>
<string name="account_undergo_review">Akun iki kudu ngalami review sadurunge sampeyan bisa melu ing program hadiah. Iki bisa njupuk ing endi wae saka sawetara menit nganti pirang-pirang dina.</string> <string name="account_undergo_review">Akun iki kudu ngalami review sadurunge sampeyan bisa melu ing program hadiah. Iki bisa njupuk ing endi wae saka sawetara menit nganti pirang-pirang dina.</string>
<string name="get_instantly_verified">Sampeyan bisa langsung diverifikasi supaya bisa melu program hadiah kanthi nggunakake akun Twitter utawa nglumpukake antrian verifikasi manual.</string>
<string name="twitter_verification">Verifikasi Twitter</string>
<string name="twitter_verification_desc">Cepet langsung diverifikasi nggunakake akun Twitter sampeyan. Alamat email Twitter sampeyan kudu cocog karo email sing diwenehake lan akun sampeyan kudu aktif.</string>
<string name="twitter_verify">Verifikasi karo Twitter</string>
<string name="skip_queue_verification">Nglewati ing Antrian</string>
<string name="skip_queue_verification_desc">Langsung antrian verifikasi manual kanthi mbayar ragad supaya miwiti melu program hadiah langsung.</string>
<string name="request_to_be_verified">Nyuwun sewengi ing kene &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Review manual bisa dideleng saka sawetara menit nganti pirang-pirang dina.</string> <string name="request_to_be_verified">Nyuwun sewengi ing kene &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Review manual bisa dideleng saka sawetara menit nganti pirang-pirang dina.</string>
<string name="enjoy_free_content">Mumpung konten gratis!</string> <string name="enjoy_free_content">Mumpung konten gratis!</string>
<string name="verify_phone_number">Verifikasi Nomer Telpon</string> <string name="verify_phone_number">Verifikasi Nomer Telpon</string>
@ -433,9 +424,6 @@
<string name="fetch_current_user_error">Akun pangguna ora bisa dijupuk maneh ing wektu iki. Coba maneh mengko.</string> <string name="fetch_current_user_error">Akun pangguna ora bisa dijupuk maneh ing wektu iki. Coba maneh mengko.</string>
<string name="purchase_request_pending">Panjaluk tuku sampeyan isih diproses. Mangga ngirim email menyang support@lbry.com.</string> <string name="purchase_request_pending">Panjaluk tuku sampeyan isih diproses. Mangga ngirim email menyang support@lbry.com.</string>
<string name="purchase_request_failed_error">Panjaluk tuku sampeyan ora bisa dirampungake ing wektu iki. Mangga ngirim email menyang support@lbry.com.</string> <string name="purchase_request_failed_error">Panjaluk tuku sampeyan ora bisa dirampungake ing wektu iki. Mangga ngirim email menyang support@lbry.com.</string>
<string name="twitter_account_ineligible">Akun Twitter sampeyan ora layak ing wektu iki: %1$s</string>
<string name="twitter_verification_not_approved">Akun sampeyan ora disetujoni kanggo program hadiah. Coba maneh mengko.</string>
<string name="twitter_verification_failed">Verifikasi Twitter gagal. Coba maneh mengko.</string>
<string name="reward_verification_successful">Sampeyan saiki bisa melu program penghargaan!</string> <string name="reward_verification_successful">Sampeyan saiki bisa melu program penghargaan!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -423,16 +423,7 @@
<string name="not_interested">Niet geïnteresseerd</string> <string name="not_interested">Niet geïnteresseerd</string>
<string name="manual_reward_verification">Handmatige Beloningsverificatie</string> <string name="manual_reward_verification">Handmatige Beloningsverificatie</string>
<string name="reward_verification">Beloningsverificatie</string> <string name="reward_verification">Beloningsverificatie</string>
<string name="social_media_verification">Sociale Media Verificatie</string>
<string name="skip_the_queue">Sla de Wachtrij over</string>
<string name="skip_queue_button_text">Sla over voor $%1$s</string>
<string name="account_undergo_review">Dit account moet worden beoordeeld voordat u kunt deelnemen aan het beloningsprogramma. Dit kan enkele minuten tot meerdere dagen duren.</string> <string name="account_undergo_review">Dit account moet worden beoordeeld voordat u kunt deelnemen aan het beloningsprogramma. Dit kan enkele minuten tot meerdere dagen duren.</string>
<string name="get_instantly_verified">U kunt onmiddellijk worden geverifieerd om te kunnen deelnemen aan het beloningsprogramma met uw Twitter-account of door de wachtrij voor handmatige verificatie over te slaan.</string>
<string name="twitter_verification">Twitter-verificatie</string>
<string name="twitter_verification_desc">Word onmiddellijk geverifieerd met uw Twitter-account. Uw Twitter e-mailadres moet overeenkomen met het e-mailadres dat u hebt opgegeven en uw account moet actief zijn.</string>
<string name="twitter_verify">Verifieer met Twitter</string>
<string name="skip_queue_verification">Sla de Wachtrij over</string>
<string name="skip_queue_verification_desc">Sla de wachtrij voor handmatige verificatie over door een vergoeding te betalen, zodat u direct kunt deelnemen aan het beloningsprogramma.</string>
<string name="request_to_be_verified">Verzoek om te worden geverifieerd in de &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Een handmatige beoordeling kan enkele minuten tot enkele dagen duren.</string> <string name="request_to_be_verified">Verzoek om te worden geverifieerd in de &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Een handmatige beoordeling kan enkele minuten tot enkele dagen duren.</string>
<string name="enjoy_free_content">Geniet ondertussen van gratis inhoud!</string> <string name="enjoy_free_content">Geniet ondertussen van gratis inhoud!</string>
<string name="verify_phone_number">Verifieer Telefoonnummer</string> <string name="verify_phone_number">Verifieer Telefoonnummer</string>
@ -444,9 +435,6 @@
<string name="fetch_current_user_error">Gebruikersaccount kan op dit moment niet worden opgehaald. Probeer het later opnieuw.</string> <string name="fetch_current_user_error">Gebruikersaccount kan op dit moment niet worden opgehaald. Probeer het later opnieuw.</string>
<string name="purchase_request_pending">Uw aankoopverzoek wordt nog verwerkt. Stuur een e-mail naar support@lbry.com.</string> <string name="purchase_request_pending">Uw aankoopverzoek wordt nog verwerkt. Stuur een e-mail naar support@lbry.com.</string>
<string name="purchase_request_failed_error">Uw aankoopverzoek kan op dit moment niet worden voltooid. Stuur een e-mail naar support@lbry.com.</string> <string name="purchase_request_failed_error">Uw aankoopverzoek kan op dit moment niet worden voltooid. Stuur een e-mail naar support@lbry.com.</string>
<string name="twitter_account_ineligible">Uw Twitter-account komt op dit moment niet in aanmerking: %1$s</string>
<string name="twitter_verification_not_approved">Uw account is niet goedgekeurd voor het beloningsprogramma. Probeer het later opnieuw.</string>
<string name="twitter_verification_failed">Twitter-verificatie mislukt. Probeer het later opnieuw.</string>
<string name="reward_verification_successful">U komt nu in aanmerking om deel te nemen aan het beloningsprogramma!</string> <string name="reward_verification_successful">U komt nu in aanmerking om deel te nemen aan het beloningsprogramma!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -423,16 +423,7 @@
<string name="not_interested">Não estou interessado</string> <string name="not_interested">Não estou interessado</string>
<string name="manual_reward_verification">Verificação manual de recompensa</string> <string name="manual_reward_verification">Verificação manual de recompensa</string>
<string name="reward_verification">Verificação de recompensa</string> <string name="reward_verification">Verificação de recompensa</string>
<string name="social_media_verification">Verificação de mídia social</string>
<string name="skip_the_queue">Pular a fila</string>
<string name="skip_queue_button_text">Pular para $%1$s</string>
<string name="account_undergo_review">Esta conta deve ser analisada antes de você participar do programa de recompensas. Isso pode levar de vários minutos a vários dias.</string> <string name="account_undergo_review">Esta conta deve ser analisada antes de você participar do programa de recompensas. Isso pode levar de vários minutos a vários dias.</string>
<string name="get_instantly_verified">Você pode ser verificado instantaneamente para poder participar do programa de recompensas usando sua conta do Twitter ou pulando a fila de verificação manual.</string>
<string name="twitter_verification">Verificação do Twitter</string>
<string name="twitter_verification_desc">Seja verificado instantaneamente usando sua conta do Twitter. Seu endereço de e-mail do Twitter deve corresponder ao e-mail que você forneceu e sua conta deve estar ativa.</string>
<string name="twitter_verify">Verifique com o Twitter</string>
<string name="skip_queue_verification">Pular a fila</string>
<string name="skip_queue_verification_desc">Pule a fila de verificação manual pagando uma taxa para começar a participar do programa de recompensas imediatamente.</string>
<string name="request_to_be_verified">Solicite para ser verificado no servidor LBRY Discord &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Server do Discord&lt;/a&gt;. Uma revisão manual pode levar de vários minutos a vários dias.</string> <string name="request_to_be_verified">Solicite para ser verificado no servidor LBRY Discord &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Server do Discord&lt;/a&gt;. Uma revisão manual pode levar de vários minutos a vários dias.</string>
<string name="enjoy_free_content">Por favor, aproveite o conteúdo gratuito enquanto isso!</string> <string name="enjoy_free_content">Por favor, aproveite o conteúdo gratuito enquanto isso!</string>
<string name="verify_phone_number">Verifique o número de telefone</string> <string name="verify_phone_number">Verifique o número de telefone</string>
@ -444,9 +435,6 @@
<string name="fetch_current_user_error">A conta do usuário não pôde ser recuperada neste momento. Por favor, tente novamente mais tarde.</string> <string name="fetch_current_user_error">A conta do usuário não pôde ser recuperada neste momento. Por favor, tente novamente mais tarde.</string>
<string name="purchase_request_pending">Sua solicitação de compra ainda está sendo processada. Envie um e-mail para support@lbry.com.</string> <string name="purchase_request_pending">Sua solicitação de compra ainda está sendo processada. Envie um e-mail para support@lbry.com.</string>
<string name="purchase_request_failed_error">Sua solicitação de compra não pôde ser concluída neste momento. Envie um e-mail para support@lbry.com.</string> <string name="purchase_request_failed_error">Sua solicitação de compra não pôde ser concluída neste momento. Envie um e-mail para support@lbry.com.</string>
<string name="twitter_account_ineligible">Sua conta do Twitter não está qualificada no momento: %1$s</string>
<string name="twitter_verification_not_approved">Sua conta não foi aprovada para o programa de recompensas. Por favor, tente novamente mais tarde.</string>
<string name="twitter_verification_failed">A verificação do Twitter falhou. Por favor, tente novamente mais tarde.</string>
<string name="reward_verification_successful">Agora você está qualificado para participar do programa de recompensas!</string> <string name="reward_verification_successful">Agora você está qualificado para participar do programa de recompensas!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -423,16 +423,7 @@
<string name="not_interested">Não interessado</string> <string name="not_interested">Não interessado</string>
<string name="manual_reward_verification">Verificação manual de recompensas</string> <string name="manual_reward_verification">Verificação manual de recompensas</string>
<string name="reward_verification">Verificação de Recompensas</string> <string name="reward_verification">Verificação de Recompensas</string>
<string name="social_media_verification">Verificação de Mídia Social</string>
<string name="skip_the_queue">Pular a fila</string>
<string name="skip_queue_button_text">Pular a fila por $%1$s</string>
<string name="account_undergo_review">Esta conta deve ser revisada antes de você poder participar do programa de recompensas. Isso pode levar de alguns minutos ou até vários dias.</string> <string name="account_undergo_review">Esta conta deve ser revisada antes de você poder participar do programa de recompensas. Isso pode levar de alguns minutos ou até vários dias.</string>
<string name="get_instantly_verified">Você pode ser verificado instantaneamente para poder participar do programa de recompensas usando sua conta do Twitter ou pulando a fila de verificação manual.</string>
<string name="twitter_verification">Verificação do Twitter</string>
<string name="twitter_verification_desc">Seja verificado instantaneamente usando sua conta do Twitter. Seu endereço de e-mail do Twitter deve corresponder ao e-mail que você forneceu e sua conta deve estar ativa.</string>
<string name="twitter_verify">Verificar com o Twitter</string>
<string name="skip_queue_verification">Pular a Fila</string>
<string name="skip_queue_verification_desc">Pule a fila de verificação manual pagando uma taxa para começar a participar do programa de recompensas imediatamente.</string>
<string name="request_to_be_verified">Please request to be verified on the &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Uma revisão manual pode levar de vários minutos a vários dias.</string> <string name="request_to_be_verified">Please request to be verified on the &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Uma revisão manual pode levar de vários minutos a vários dias.</string>
<string name="enjoy_free_content">Enquanto isso, aproveite o conteúdo gratuito!</string> <string name="enjoy_free_content">Enquanto isso, aproveite o conteúdo gratuito!</string>
<string name="verify_phone_number">Verificar Número de Telefone</string> <string name="verify_phone_number">Verificar Número de Telefone</string>
@ -444,9 +435,6 @@
<string name="fetch_current_user_error">Não foi possível recuperar a conta do usuário no momento. Por favor, tente novamente mais tarde.</string> <string name="fetch_current_user_error">Não foi possível recuperar a conta do usuário no momento. Por favor, tente novamente mais tarde.</string>
<string name="purchase_request_pending">Sua solicitação de compra ainda está sendo processada. Envie um e-mail para support@lbry.com.</string> <string name="purchase_request_pending">Sua solicitação de compra ainda está sendo processada. Envie um e-mail para support@lbry.com.</string>
<string name="purchase_request_failed_error">Sua solicitação de compra não pôde ser concluída neste momento. Envie um e-mail para support@lbry.com.</string> <string name="purchase_request_failed_error">Sua solicitação de compra não pôde ser concluída neste momento. Envie um e-mail para support@lbry.com.</string>
<string name="twitter_account_ineligible">Sua conta do Twitter não está qualificada no momento: %1$s</string>
<string name="twitter_verification_not_approved">Sua conta não foi aprovada para o programa de recompensas. Por favor, tente novamente mais tarde.</string>
<string name="twitter_verification_failed">A verificação do Twitter falhou. Por favor, tente novamente mais tarde.</string>
<string name="reward_verification_successful">Agora você está qualificado para participar do programa de recompensas!</string> <string name="reward_verification_successful">Agora você está qualificado para participar do programa de recompensas!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -445,16 +445,7 @@
<string name="not_interested">Не интересно </string> <string name="not_interested">Не интересно </string>
<string name="manual_reward_verification">Ручное подтверждение наград </string> <string name="manual_reward_verification">Ручное подтверждение наград </string>
<string name="reward_verification">Подтверждение наград</string> <string name="reward_verification">Подтверждение наград</string>
<string name="social_media_verification">Верификация через социальные сети</string>
<string name="skip_the_queue">Пропустить очередь</string>
<string name="skip_queue_button_text">Пропустить за $%1$s</string>
<string name="account_undergo_review">Этот аккаунт должен проследовать проверке перед участием в программе вознаграждений. Это может занять от нескольких минут до нескольких дней. </string> <string name="account_undergo_review">Этот аккаунт должен проследовать проверке перед участием в программе вознаграждений. Это может занять от нескольких минут до нескольких дней. </string>
<string name="get_instantly_verified">Вы можете сразу пройти проверку для того, чтобы участвовать в программе наград, используя Ваш аккаунт в Твиттере или пропустив проверку вручную.</string>
<string name="twitter_verification">Проверка с помощью Твиттера</string>
<string name="twitter_verification_desc">Пройдите проверку быстрее с помощью Вашего акккаунта в Твиттере. Адрес электронной почты этого аккаунта должен совпадать с адресом, который Вы предоставили ранее, а также аккаунт должен быть активен.</string>
<string name="twitter_verify">Верифицировать с помощью Твиттера</string>
<string name="skip_queue_verification">Пропустить очередь</string>
<string name="skip_queue_verification_desc">Пропустить очередь проверки, заплатив небольшую сумму, чтобы незамедлительно принять участие в программе наград.</string>
<string name="request_to_be_verified">Пожалуйста, запросите проверку в &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Проверка вручную может занять от пары минут до нескольких дней.</string> <string name="request_to_be_verified">Пожалуйста, запросите проверку в &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Проверка вручную может занять от пары минут до нескольких дней.</string>
<string name="enjoy_free_content">Наслаждайтесь бесплатным контентом в любое время!</string> <string name="enjoy_free_content">Наслаждайтесь бесплатным контентом в любое время!</string>
<string name="verify_phone_number">Подтвердите номер телефона</string> <string name="verify_phone_number">Подтвердите номер телефона</string>
@ -466,9 +457,6 @@
<string name="fetch_current_user_error">Не удалось получить информацию об аккаунте. Пожалуйста, попробуйте позже.</string> <string name="fetch_current_user_error">Не удалось получить информацию об аккаунте. Пожалуйста, попробуйте позже.</string>
<string name="purchase_request_pending">Ваш запрос о покупке всё ещё обрабатывается. Пожалуйста, отправьте письмо на support@lbry.com.</string> <string name="purchase_request_pending">Ваш запрос о покупке всё ещё обрабатывается. Пожалуйста, отправьте письмо на support@lbry.com.</string>
<string name="purchase_request_failed_error">Ваш запрос о покупке не может быть обработан на данный момент. Пожалуйста, обратитесь к нам с письмом по адресу support@lbry.com.</string> <string name="purchase_request_failed_error">Ваш запрос о покупке не может быть обработан на данный момент. Пожалуйста, обратитесь к нам с письмом по адресу support@lbry.com.</string>
<string name="twitter_account_ineligible">Пока что Ваш аккаунт в Твиттере нам не подходит: %1$s</string>
<string name="twitter_verification_not_approved">Ваш аккаунт не был подтверждён для участия в программе наград. Пожалуйста, повторите попытку позже.</string>
<string name="twitter_verification_failed">Проверка Твиттер аккаунта неудалась. Пожалуйста, повторите попытку позже</string>
<string name="reward_verification_successful">Теперь Вы являетесь участником программмы наград!</string> <string name="reward_verification_successful">Теперь Вы являетесь участником программмы наград!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -434,16 +434,7 @@
<string name="not_interested">Nisam zainteresovan</string> <string name="not_interested">Nisam zainteresovan</string>
<string name="manual_reward_verification">Ručna Verifikacija za Nagrade</string> <string name="manual_reward_verification">Ručna Verifikacija za Nagrade</string>
<string name="reward_verification">Verifikacija Nagrada</string> <string name="reward_verification">Verifikacija Nagrada</string>
<string name="social_media_verification">Verifikacija Društvenih Mreža</string>
<string name="skip_the_queue">Preskoči Redosled</string>
<string name="skip_queue_button_text">Preskoči za %1$s$</string>
<string name="account_undergo_review">Vaš nalog mora proći proveru pre nego što budete odobreni za nagradni program. Ovaj proces može trajati od nekoliko minuta do nekoliko dana.</string> <string name="account_undergo_review">Vaš nalog mora proći proveru pre nego što budete odobreni za nagradni program. Ovaj proces može trajati od nekoliko minuta do nekoliko dana.</string>
<string name="get_instantly_verified">Možete se odmah verifikovati čime stičete pravo učestovanja u Nagradnom programu putem vašeg Twitter naloga i time preskočiti red manualne verifikacije.</string>
<string name="twitter_verification">Twitter Verifikacija</string>
<string name="twitter_verification_desc">Verifikujte se odmah putem vašeg Twitter naloga. Vaša Twitter email adresa mora biti ista kao email adresa koju ste prethodno naveli, i vaš nalog bi potom trebao biti aktivan.</string>
<string name="twitter_verify">Verifikujte se putem Twitter-a</string>
<string name="skip_queue_verification">Preskoči Redosled</string>
<string name="skip_queue_verification_desc">Preskočite red za manuelnu verifikaciju plaćanjem provizije i time odmah steknite pravo za učestvovanje u Nagradnom programu.</string>
<string name="request_to_be_verified">Molimo vas da zatražite manuelnu verifikaciju na &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Obrada manuelnog zahteva može trajati od nekoliko minuta do nekoliko dana.</string> <string name="request_to_be_verified">Molimo vas da zatražite manuelnu verifikaciju na &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Obrada manuelnog zahteva može trajati od nekoliko minuta do nekoliko dana.</string>
<string name="enjoy_free_content">Uživajte u besplatnim sadržajima u međjuvremenu!</string> <string name="enjoy_free_content">Uživajte u besplatnim sadržajima u međjuvremenu!</string>
<string name="verify_phone_number">Potvrdite Broj Telefona</string> <string name="verify_phone_number">Potvrdite Broj Telefona</string>
@ -455,9 +446,6 @@
<string name="fetch_current_user_error">Korisnički nalog ne može biti učitan u ovom trenutku. Molimo pokušajte kasnije.</string> <string name="fetch_current_user_error">Korisnički nalog ne može biti učitan u ovom trenutku. Molimo pokušajte kasnije.</string>
<string name="purchase_request_pending">Vaš zahtev za kupovinu je i dalje u obradi. Molimo vas pošaljite email na support@lbry.com.</string> <string name="purchase_request_pending">Vaš zahtev za kupovinu je i dalje u obradi. Molimo vas pošaljite email na support@lbry.com.</string>
<string name="purchase_request_failed_error">Vaš zahtev za kupovinu trenutno ne može biti obradjen. Molimo vas pošaljite email na support@lbry.com.</string> <string name="purchase_request_failed_error">Vaš zahtev za kupovinu trenutno ne može biti obradjen. Molimo vas pošaljite email na support@lbry.com.</string>
<string name="twitter_account_ineligible">Vaš Twitter nalog trenutno nije podoban: %1$s</string>
<string name="twitter_verification_not_approved">Vaš nalog nije odobren za Nagradni program. Molimo pokušajte kasnije.</string>
<string name="twitter_verification_failed">Twitter verifikacija neuspešna. Molimo pokušajte kasnije.</string>
<string name="reward_verification_successful">Sada ste podobni da učestvujete u Nagradnom programu!</string> <string name="reward_verification_successful">Sada ste podobni da učestvujete u Nagradnom programu!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -445,16 +445,7 @@
<string name="not_interested">Не зацікавлений</string> <string name="not_interested">Не зацікавлений</string>
<string name="manual_reward_verification">Ручна Верифікація Винагород </string> <string name="manual_reward_verification">Ручна Верифікація Винагород </string>
<string name="reward_verification">Підтвердження винагород </string> <string name="reward_verification">Підтвердження винагород </string>
<string name="social_media_verification">Підтвердження за допомогою соціальних мереж</string>
<string name="skip_the_queue">Пропустити Чергу</string>
<string name="skip_queue_button_text">Попустити за $%1$s</string>
<string name="account_undergo_review">Цей акаунт має пройти перевірку перед прийняттям участі у програмі винагород. Це може зайняти від декількох хвилин до декількох днів.</string> <string name="account_undergo_review">Цей акаунт має пройти перевірку перед прийняттям участі у програмі винагород. Це може зайняти від декількох хвилин до декількох днів.</string>
<string name="get_instantly_verified">Ви можете бути підтверджені миттєво для участі у програмі винагород за допомогою акаунту Twitter або пропустіть чергу ручного підтвердження. </string>
<string name="twitter_verification">Підтвердження за допомогою Twitter</string>
<string name="twitter_verification_desc">Отримайте миттєве підтвердження, використавши акаунт Twitter. Ваша пошта Twitter має збігатися з поштою, яку Ви надали, а ваш акаунт має бути активним. </string>
<string name="twitter_verify">Підтвердіть за допомогою Twitter </string>
<string name="skip_queue_verification">Пропустити Чергу</string>
<string name="skip_queue_verification_desc">Пропустіть ручну верифікацію сплативши внесок для миттєвого початку участі у програмі винагород. </string>
<string name="request_to_be_verified">Будь ласка, зробіть запит верифікації у &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Ручне підтвердження може зайняти скільки-завгодно від декількох хвилин до декількох днів. </string> <string name="request_to_be_verified">Будь ласка, зробіть запит верифікації у &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Ручне підтвердження може зайняти скільки-завгодно від декількох хвилин до декількох днів. </string>
<string name="enjoy_free_content">А поки що насолоджуйтесь безкоштовним контентом! </string> <string name="enjoy_free_content">А поки що насолоджуйтесь безкоштовним контентом! </string>
<string name="verify_phone_number">Підтвердіть номер телефону </string> <string name="verify_phone_number">Підтвердіть номер телефону </string>
@ -466,9 +457,6 @@
<string name="fetch_current_user_error">Акаунт не може бути відновлений зараз. Будь ласка, спробуйте ще раз пізніше.</string> <string name="fetch_current_user_error">Акаунт не може бути відновлений зараз. Будь ласка, спробуйте ще раз пізніше.</string>
<string name="purchase_request_pending">Ваша запит на придбання оброблюється. Будь ласка, пишіть на support@lbry.com.</string> <string name="purchase_request_pending">Ваша запит на придбання оброблюється. Будь ласка, пишіть на support@lbry.com.</string>
<string name="purchase_request_failed_error">Ваш запит придбання не може бути оброблений зараз. Будь ласка, пишіть на support@lbry.com.</string> <string name="purchase_request_failed_error">Ваш запит придбання не може бути оброблений зараз. Будь ласка, пишіть на support@lbry.com.</string>
<string name="twitter_account_ineligible">Ваш акаунт Twitter недоступний зараз: %1$s</string>
<string name="twitter_verification_not_approved">Ваш акаунт не був підтверджений для участі у програмі винагород. Будь ласка, спробуйте ще раз пізніше. </string>
<string name="twitter_verification_failed">Верифікація у Twitter не вдалася. Будь ласка, спробуйте ще раз пізніше.</string>
<string name="reward_verification_successful">Тепер Ви можете прийняти участь у програмі нагород! </string> <string name="reward_verification_successful">Тепер Ви можете прийняти участь у програмі нагород! </string>
<!-- Forms --> <!-- Forms -->

View file

@ -414,16 +414,7 @@
<string name="not_interested">Không quan tâm</string> <string name="not_interested">Không quan tâm</string>
<string name="manual_reward_verification">Xác nhận phần thưởng thủ công</string> <string name="manual_reward_verification">Xác nhận phần thưởng thủ công</string>
<string name="reward_verification">Xác minh phần thưởng</string> <string name="reward_verification">Xác minh phần thưởng</string>
<string name="social_media_verification">Xác minh mạng xã hội</string>
<string name="skip_the_queue">Bỏ qua</string>
<string name="skip_queue_button_text">Bỏ qua cho $%1$s</string>
<string name="account_undergo_review">Tài khoản này phải trải qua quá trình xem xét trước khi bạn có thể tham gia chương trình phần thưởng. Điều này có thể mất bất cứ nơi nào từ vài phút đến vài ngày.</string> <string name="account_undergo_review">Tài khoản này phải trải qua quá trình xem xét trước khi bạn có thể tham gia chương trình phần thưởng. Điều này có thể mất bất cứ nơi nào từ vài phút đến vài ngày.</string>
<string name="get_instantly_verified">Bạn có thể được xác minh ngay lập tức để có thể tham gia vào chương trình phần thưởng bằng tài khoản Twitter của mình hoặc bỏ qua hàng đợi xác minh thủ công.</string>
<string name="twitter_verification">Xác minh Twitter</string>
<string name="twitter_verification_desc">Được xác minh ngay lập tức bằng tài khoản Twitter của bạn. Địa chỉ email Twitter của bạn phải khớp với email mà bạn đã cung cấp và tài khoản của bạn phải hoạt động.</string>
<string name="twitter_verify">Xác minh với Twitter</string>
<string name="skip_queue_verification">Bỏ qua</string>
<string name="skip_queue_verification_desc">Bỏ qua hàng đợi xác minh thủ công bằng cách trả phí để bắt đầu tham gia chương trình phần thưởng ngay lập tức.</string>
<string name="request_to_be_verified">Vui lòng yêu cầu được xác minh trên &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Quá trình xem xét thủ công có thể mất từ vài phút đến vài ngày.</string> <string name="request_to_be_verified">Vui lòng yêu cầu được xác minh trên &lt;a href=\"https://discordapp.com/invite/Z3bERWA\"&gt;LBRY Discord server&lt;/a&gt;. Quá trình xem xét thủ công có thể mất từ vài phút đến vài ngày.</string>
<string name="enjoy_free_content">Hãy tận hưởng nội dung miễn phí trong khi chờ đợi!</string> <string name="enjoy_free_content">Hãy tận hưởng nội dung miễn phí trong khi chờ đợi!</string>
<string name="verify_phone_number">Xác nhận số điện thoại</string> <string name="verify_phone_number">Xác nhận số điện thoại</string>
@ -435,9 +426,6 @@
<string name="fetch_current_user_error">Tài khoản người dùng không thể được lấy tại thời điểm này. Vui lòng thử lại sau.</string> <string name="fetch_current_user_error">Tài khoản người dùng không thể được lấy tại thời điểm này. Vui lòng thử lại sau.</string>
<string name="purchase_request_pending">Yêu cầu mua hàng của bạn vẫn đang được xử lý. Vui lòng gửi email tới support@lbry.com.</string> <string name="purchase_request_pending">Yêu cầu mua hàng của bạn vẫn đang được xử lý. Vui lòng gửi email tới support@lbry.com.</string>
<string name="purchase_request_failed_error">Không thể hoàn thành yêu cầu mua hàng của bạn vào lúc này. Vui lòng gửi email tới support@lbry.com.</string> <string name="purchase_request_failed_error">Không thể hoàn thành yêu cầu mua hàng của bạn vào lúc này. Vui lòng gửi email tới support@lbry.com.</string>
<string name="twitter_account_ineligible">Tài khoản Twitter của bạn không đủ điều kiện tại thời điểm này:%1$s</string>
<string name="twitter_verification_not_approved">Tài khoản của bạn không được chấp thuận cho chương trình phần thưởng. Vui lòng thử lại sau.</string>
<string name="twitter_verification_failed">Xác minh Twitter không thành công. Vui lòng thử lại sau.</string>
<string name="reward_verification_successful">Bây giờ bạn đủ điều kiện để tham gia vào chương trình phần thưởng!</string> <string name="reward_verification_successful">Bây giờ bạn đủ điều kiện để tham gia vào chương trình phần thưởng!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -374,12 +374,7 @@
<string name="not_interested">不感興趣</string> <string name="not_interested">不感興趣</string>
<string name="manual_reward_verification">手動認證獎賞</string> <string name="manual_reward_verification">手動認證獎賞</string>
<string name="reward_verification">認證獎賞</string> <string name="reward_verification">認證獎賞</string>
<string name="social_media_verification">社交網路認證</string>
<string name="skip_the_queue">跳過等待</string>
<string name="account_undergo_review">這帳號必須通過手動批核才能參與獎賞計劃。\n這可能需時數分鐘至數天不等。</string> <string name="account_undergo_review">這帳號必須通過手動批核才能參與獎賞計劃。\n這可能需時數分鐘至數天不等。</string>
<string name="twitter_verification">Twitter 認證</string>
<string name="twitter_verify">使用 Twitter 認證</string>
<string name="skip_queue_verification">跳過等待</string>
<string name="enjoy_free_content">在等候的同時請享受免費的內容!</string> <string name="enjoy_free_content">在等候的同時請享受免費的內容!</string>
<string name="verify_phone_number">使用手機號碼認證</string> <string name="verify_phone_number">使用手機號碼認證</string>
<string name="enter_phone_verify_code">請輸入發送到 %1$s 的認證碼</string> <string name="enter_phone_verify_code">請輸入發送到 %1$s 的認證碼</string>
@ -387,9 +382,6 @@
<string name="verify">認證</string> <string name="verify">認證</string>
<string name="please_enter_valid_phone">請輸入有效的手機號碼。</string> <string name="please_enter_valid_phone">請輸入有效的手機號碼。</string>
<string name="please_enter_verification_code">請輸入發送到你手機號碼的認證碼。</string> <string name="please_enter_verification_code">請輸入發送到你手機號碼的認證碼。</string>
<string name="twitter_account_ineligible">你的 Twitter 帳號目前不符合資格:%1$s</string>
<string name="twitter_verification_not_approved">你的帳號未能通過獎賞認證。請稍後再試。</string>
<string name="twitter_verification_failed">Twitter 認證失敗。請稍後再試。</string>
<string name="reward_verification_successful">你現在已有資格參與獎賞計劃!</string> <string name="reward_verification_successful">你現在已有資格參與獎賞計劃!</string>
<!-- Forms --> <!-- Forms -->

View file

@ -423,16 +423,7 @@
<string name="not_interested">Not interested</string> <string name="not_interested">Not interested</string>
<string name="manual_reward_verification">Manual Reward Verification</string> <string name="manual_reward_verification">Manual Reward Verification</string>
<string name="reward_verification">Reward Verification</string> <string name="reward_verification">Reward Verification</string>
<string name="social_media_verification">Social Media Verification</string>
<string name="skip_the_queue">Skip the Queue</string>
<string name="skip_queue_button_text">Skip for $%1$s</string>
<string name="account_undergo_review">This account must undergo review before you can participate in the rewards program. This can take anywhere from several minutes to several days.</string> <string name="account_undergo_review">This account must undergo review before you can participate in the rewards program. This can take anywhere from several minutes to several days.</string>
<string name="get_instantly_verified">You can get instantly verified to be able to participate in the rewards program using your Twitter account or skipping the manual verification queue.</string>
<string name="twitter_verification">Twitter Verification</string>
<string name="twitter_verification_desc">Get instantly verified using your Twitter account. Your Twitter email address must match the email that you provided and your account should be active.</string>
<string name="twitter_verify">Verify with Twitter</string>
<string name="skip_queue_verification">Skip the Queue</string>
<string name="skip_queue_verification_desc">Skip the manual verification queue by paying a fee in order to start participating in the rewards program immediately.</string>
<string name="request_to_be_verified">Please request to be verified on the &lt;a href="https://discordapp.com/invite/Z3bERWA"&gt;LBRY Discord server&lt;/a&gt;. A manual review can take anywhere from several minutes to several days.</string> <string name="request_to_be_verified">Please request to be verified on the &lt;a href="https://discordapp.com/invite/Z3bERWA"&gt;LBRY Discord server&lt;/a&gt;. A manual review can take anywhere from several minutes to several days.</string>
<string name="enjoy_free_content">Please enjoy free content in the meantime!</string> <string name="enjoy_free_content">Please enjoy free content in the meantime!</string>
<string name="verify_phone_number">Verify Phone Number</string> <string name="verify_phone_number">Verify Phone Number</string>
@ -444,9 +435,6 @@
<string name="fetch_current_user_error">User account could not be retrieved at this time. Please try again later.</string> <string name="fetch_current_user_error">User account could not be retrieved at this time. Please try again later.</string>
<string name="purchase_request_pending">Your purchase request is still being processed. Please send an email to support@lbry.com.</string> <string name="purchase_request_pending">Your purchase request is still being processed. Please send an email to support@lbry.com.</string>
<string name="purchase_request_failed_error">Your purchase request could not be completed at this time. Please send an email to support@lbry.com.</string> <string name="purchase_request_failed_error">Your purchase request could not be completed at this time. Please send an email to support@lbry.com.</string>
<string name="twitter_account_ineligible">Your Twitter account is not eligible at this time: %1$s</string>
<string name="twitter_verification_not_approved">Your account was not approved for the rewards program. Please try again later.</string>
<string name="twitter_verification_failed">Twitter verification failed. Please try again later.</string>
<string name="reward_verification_successful">You are now eligible to participate in the rewards program!</string> <string name="reward_verification_successful">You are now eligible to participate in the rewards program!</string>
<!-- Forms --> <!-- Forms -->