0

私は重要な配達をしています、私はあなたが私を助けてくれることを願っています。

GCMを使用する必要があります。http://developer.android.com/guide/google/gcm/demo.htmlの公式ガイドにあるファイルを使用しています

「AppEngineforJavaを使用したサーバーのセットアップ」を実行しましたが、機能します。

私の問題はAndroidアプリケーションです。正確にはGCMからIDを受け取らないので、アプリケーションが登録を試みるときはいつでも。

どうもありがとう....

public class DemoActivity extends Activity {

    TextView mDisplay;
    AsyncTask<Void, Void, Void> mRegisterTask;

    @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        checkNotNull(SERVER_URL, "SERVER_URL");
        checkNotNull(SENDER_ID, "SENDER_ID");

        // Make sure the device has the proper dependencies.
        GCMRegistrar.checkDevice(this);
        // Make sure the manifest was properly set - comment out this line
        // while developing the app, then uncomment it when it's ready.
        GCMRegistrar.checkManifest(this);
        setContentView(R.layout.main);
        mDisplay = (TextView) findViewById(R.id.display);
        registerReceiver(mHandleMessageReceiver,
                new IntentFilter(DISPLAY_MESSAGE_ACTION));
        final String regId = GCMRegistrar.getRegistrationId(this);
       if (regId.equals("")) {

            // Automatically registers application on startup.
            GCMRegistrar.register(this, SENDER_ID);

        } else {
            ....
        }

CommonUtilities

public final class CommonUtilities 
{
     static final String SERVER_URL = "http://127.0.0.1:8888/gcmdemo4/home";
     static final String SENDER_ID = "843761346XXX";
...
}

GCMIntentService

public class GCMIntentService extends GCMBaseIntentService {

@SuppressWarnings("hiding")
private static final String TAG = "GCMIntentService";

public GCMIntentService() {
    super(SENDER_ID);
}

@Override
public void onRegistered(Context context, String registrationId) {
    Log.i(TAG, "Device registered: regId = " + registrationId);
    displayMessage(context, getString(R.string.gcm_registered));
    ServerUtilities.register(context, registrationId);
}
 .....

私のマニフェスト

 <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.registrazionegcm"
    android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="16" />
<permission
    android:name="com.example.registrazionegcm.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example.registrazionegcm.permission.C2D_MESSAGE" />
<!-- App receives GCM messages. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- GCM connects to Google Services. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- GCM requires a Google account. -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name="DemoActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.example.registrazionegcm" />
        </intent-filter>
    </receiver>
    <service android:name=".GCMIntentService" />
</application>

4

1 に答える 1

1

「registerReceiver」のコードを教えてください。

私のSENDER_IDが間違っていたとき、私は同じ問題を抱えていました。もう一度確認して、パッケージも確認してください: com.example.registrazionegcm.GCMIntentService onError と onRegistered にいくつかのブレークポイントを設定します

私にとって、このコードは機能します:

@Override
public void run() {

    GCMRegistrar.checkDevice(mContext);
    GCMRegistrar.checkManifest(mContext);
    String deviceToken = GCMRegistrar.getRegistrationId(mContext);
    if (deviceToken.equals("")) {
        GCMRegistrar.register(mContext, "XXXXXXXXXXXXXXX");
        deviceToken = GCMRegistrar.getRegistrationId(mContext);
        if(!deviceToken.equals("")){
            GCMRegistrar.setRegisteredOnServer(mContext, true);
            // register deviceToken on CommNotes srv
            RequestMaker req = new RequestMaker(Constant.REQ_REGISTER_GCM, mContext);
            //if unsuccessful, try again 5 times
            for(int i = 0; i<5; i++){
                Log.d("ComNotes", "registration id"+deviceToken);
                if(req.doRequest(deviceToken) == ReturnCode.CODE_OK){
                    break;
                }             
            }
        }
        //TODO manage unsuccess: display error : "No PUSH available"
    } else {
        Log.v("CommunityNotes", "Already registered "+deviceToken);
    }
}
于 2012-10-22T18:48:22.617 に答える