Я использую библиотеку SocialLib , чтобы добавить функцию обмена в мое приложение. У меня проблемы с обратным вызовом oAuth.
Я создал следующую операцию для совместного использования:
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import com.expertiseandroid.lib.sociallib.connectors.SocialNetworkHelper;
import com.expertiseandroid.lib.sociallib.connectors.TwitterConnector;
import com.expertiseandroid.lib.sociallib.exceptions.NotAuthentifiedException;
public class ShareActivity extends Activity {
protected final static String TAG = "ShareActivity";
private final Activity activity = this;
public static final int SERVICE_TWITTER = 0;
public static final int SERVICE_FACEBOOK = 1;
public static final int SERVICE_LINKEDIN = 2;
// twitter API
protected static String TWITTER_KEY = "";
protected static String TWITTER_SECRET = "";
protected static String TWITTER_CALLBACK = "myapp://twitter";
protected static String stringToShare = "Hello World";
// connectors
private static TwitterConnector twitter;
/**
* @see android.app.Activity#onCreate(Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getIntent().getExtras();
Uri uri = this.getIntent().getData();
if (uri != null && uri.toString().startsWith(TWITTER_CALLBACK)) {
postTweet();
}
else {
switch (bundle.getInt("service")) {
case SERVICE_TWITTER:
twitterAuth();
break;
default:
break;
}
}
}
public void twitterAuth() {
twitter = SocialNetworkHelper.createTwitterConnector(TWITTER_KEY, TWITTER_SECRET, TWITTER_CALLBACK);
}
public void postTweet() {
twitter.authorize(activity);
twitter.tweet(stringToShare);
finish();
}
}
Оператор (MainActivity), из которого я хочу поделиться, я вызываю следующее для запуска ShareActivity:
Intent intent = new Intent(getApplicationContext(), ShareActivity.class);
intent.putExtra("service", ShareActivity.SERVICE_TWITTER);
startActivity(intent);
Я использую фильтр намерений, чтобы Twitter (oAuth) мог выполнять обратный вызов для активности вызова:
<activity android:name=".MainActivity" />
<activity android:name=".ShareActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="twitter" android:scheme="lifetime"/>
</intent-filter>
</activity>
Поток:
- Используйте щелчок кнопкой «Поделиться» на MainActivity.
- Мы вызываем
startActivity(intent)
с аргументом intent
(ShareActivity).
ShareActivity.onCreate()
вызывается, и мы запускаем процесс аутентификации Twitter oAuth.
- Отображается активность веб-браузера, и пользователь вводит свои учетные данные Twitter.
- Затем Twitter отображает перенаправление на страницу приложения.
- Twitter перезванивает на URL
myapp://twitter
- Срабатывает фильтр намерений, в результате чего создается и отображается новый экземпляр действия ShareActivity.
- ShareActivity затем отправляет твит в Твиттер, а твит успешно публикуется на стене пользователя.
- ShareActivity затем вызывает
finish()
Задача
Все работает вплоть до пункта 9. Вызов finish()
не возвращает исходную MainActivity, он просто закрывает ShareActivity и возвращает к активности браузера, отображая страницу «Перенаправление обратно в приложение».
Если пользователь нажимает кнопку «Назад», его возвращают обратно через все страницы авторизации в Твиттере и затем в конечном итоге возвращают в MainActivity.
Что должно произойти
Когда Tweet опубликован, и мы закончили с ShareActivity, исходная MainActivity должна быть возвращена (в исходном состоянии).
ShareLib обрабатывает все этапы аутентификации и публикации, и я не могу контролировать, как он создает новые действия.
Когда я создавал свою ShareActivity, я пытался отправить флаг FLAG_ACTIVITY_NEW_TASK с идеей, что это создаст новый стек действий, но я не знаю, как закрыть все действия в этом стеке и вернуться к MainActivity.
Любая помощь будет очень признательна.