在Android的四角集成四角、Android

2023-09-04 23:47:13 作者:承诺丶苍白的可笑。

我要整合四方的机器人。所以,我想两个例子。

I want to integrate foursquare in android. So i tried two examples.

第一个例子:

public class ActivityWebView extends Activity 
{
private static final String TAG = "ActivityWebView";

/**
 * Get these values after registering your oauth app at: https://foursquare.com/oauth/
 */

public static final String CLIENT_ID = "";
public static final String OAUTH_CALLBACK_SCHEME = "x-oauthflow-foursquare";
public static final String OAUTH_CALLBACK_HOST = "callback";
public static final String CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);

    String url =
        "https://foursquare.com/oauth2/authenticate" + 
            "?client_id=" + CLIENT_ID + 
            "&response_type=token" + 
            "&redirect_uri=" + CALLBACK_URL;

    // If authentication works, we'll get redirected to a url with a pattern like:  
    //
    //    http://YOUR_REGISTERED_REDIRECT_URI/#access_token=ACCESS_TOKEN
    //
    // We can override onPageStarted() in the web client and grab the token out.
    WebView webview = (WebView)findViewById(R.id.webview);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setWebViewClient(new WebViewClient() {
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            String fragment = "#access_token=";
            int start = url.indexOf(fragment);
            if (start > -1) {
                // You can use the accessToken for api calls now.
                String accessToken = url.substring(start + fragment.length(), url.length());

                Log.v(TAG, "OAuth complete, token: [" + accessToken + "].");

                Toast.makeText(ActivityWebView.this, "Token: " + accessToken, Toast.LENGTH_SHORT).show();
            }
        }
    });
    webview.loadUrl(url);
}

}

第二个例子:

的http://blog.doityourselfandroid.com/2011/09/05/integrate-foursquare-android-application/

和我添加了额外的code清单文件

And i added additional code in Manifest file

<activity android:name=".ActivityWebView" android:launchMode="singleTask"  android:noHistory="true"> 
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="x-oauthflow-foursquare" android:host="callback" />
        </intent-filter>
    </activity>

运行后,这两个应用程序验证是成功的,但它显示的Web视图与此消息

after run the two applications Authentication was success but it shows web view with this message

you dont have permission to open this page x-oauthflow-foursquare://callback#access_token=DRWDP004zzAIZ1PPJEANEBFCM3NZJ1T414U2Z

所以,请告诉我的是它不需要添加任何额外的权限。请解决我的问题。

So please tell me is it need add any extra permissions. Please solve my problem.

推荐答案

使用Foursquare的API检查该code的认证部分和回调部分:

Check this code for Authentication Part and Callback Part using Foursquare API:

public class ActivityMain extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btn = (Button)findViewById(R.id.button);
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(ActivityMain.this, ActivityWebView.class);
            startActivity(intent);
        }
    });
}
}

ActivityWebView.Java:按钮点击后:

ActivityWebView.Java : After Button clicked :

public class ActivityWebView extends Activity{
    private static final String TAG = "ActivityWebView";
    public static final String CLIENT_ID = "01QWBUR2UUFSMMLZXOM5YY0UWCM4BC0F2IOZDJ0S5XGOINQM";
    public static final String OAUTH_CALLBACK_SCHEME = "x-oauthflow-foursquare";
    public static final String OAUTH_CALLBACK_HOST = "callback";
    public static final String CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_webview);       

    String url =
        "https://foursquare.com/oauth2/authenticate" + 
            "?client_id=" + CLIENT_ID + 
            "&response_type=token" + 
            "&redirect_uri=" + CALLBACK_URL;

            WebView webview = (WebView)findViewById(R.id.webview);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setWebViewClient(new WebViewClient() {
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            String fragment = "#access_token=";
            int start = url.indexOf(fragment);
            if (start > -1) {
                // You can use the accessToken for api calls now.
                String accessToken = url.substring(start + fragment.length(), url.length());

                Log.v(TAG, "OAuth complete, token: [" + accessToken + "].");

                Toast.makeText(ActivityWebView.this, "Token: " + accessToken, Toast.LENGTH_SHORT).show();
                editor.putString("Access_Token", accessToken);
                editor.commit();
                startActivity(new Intent(ActivityWebView.this,Nearest_Places_View.class));  // After Successfull Login the Web view will Redirected to Nearest_Places_View Activity
            }
        }
    });
    webview.loadUrl(url);
}
}

activity_webview.xml:

activity_webview.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" >
 <WebView  
    android:id="@+id/webview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"  />
 </LinearLayout>

回调后活动:

Activity after Callback :

public class Nearest_Places_View extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.anylayout);

        // Do your All stuff for Foursquare for example getting User Checkins,Nearest Place
    }
 }

您manifest文件应该是这样的:

You manifest file should look like this :

<?xml version="1.0" encoding="utf-8"?>
 <manifest 
  xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.foursquare.android.oauth"
  android:versionCode="1"
  android:versionName="1.0">
  <uses-sdk android:minSdkVersion="4" />
   <application     android:icon="@drawable/icon"    android:label="@string/app_name">
        <activity   android:name=".ActivityMain"        android:label="@string/app_name">
           <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
       </activity>

  <activity
  android:name=".Nearest_Places_View"
  />

<activity android:name=".ActivityWebView" android:launchMode="singleTask">>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="x-oauthflow-foursquare" android:host="callback" />
    </intent-filter>
</activity>

   

回拨应该为所有三个1.活动2.manifest 3.Settings页相同。那么只有它会工作。

Call back should be same for all the three 1. Activity 2.manifest 3.Settings Page. then only it will work.

 
精彩推荐
图片推荐