1

デバイスをGCMに登録する必要があるアプリケーションを開発していますが、デバイスが登録されていません。私のログはここにありますマニフェストのアプリケーションにすべての権限を付与しました

onGCMの登録方法は

    public void register()
        {
            GCMRegistrar.checkDevice(this);
            GCMRegistrar.checkManifest(this);

            if (GCMRegistrar.isRegistered(this))
                {
                    Log.d("info", GCMRegistrar.getRegistrationId(this));
                }

            final String regId = GCMRegistrar.getRegistrationId(this);
            System.out.println("registration ID is " + regId);
            if (regId.equals(""))
                {
                    System.out.println("registration ID is " + regId);
                    GCMRegistrar.register(this, CommonUtilities.SENDER_ID);
                    Log.d("info", GCMRegistrar.getRegistrationId(this));
                    System.out.println("Get Reg ID: " + GCMRegistrar.getRegistrationId(this));
                }
            else
                {
                    Log.d("info", "already registered as" + regId);
                }
        }

私のGCMサービスは

public class GCMService extends GCMBaseIntentService
{
    public GCMService()
        {

            super(CommonUtilities.SENDER_ID);
        }

    public void generateNotification(Context context, String message)
        {
            long when = System.currentTimeMillis();
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            Notification notification = new Notification(R.drawable.ic_launcher, message, when);
            String title = context.getString(R.string.app_name);

            Intent notificationIntent = new Intent(context, OffersActivity.class);
            PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
            notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            notification.setLatestEventInfo(context, title, message, intent);
            notification.flags |= Notification.FLAG_AUTO_CANCEL;
            notification.defaults |= Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS;
            notificationManager.notify(0, notification);
        }

    @Override
    protected void onError(Context arg0, String arg1)
        {
        }

    @Override
    protected void onMessage(Context arg0, Intent arg1)
        {
            Log.d("GCM", "RECIEVED A MESSAGE");             
            generateNotification(arg0, "New Offers Are Available");
        }

    @Override
    protected void onRegistered(Context arg0, String arg1)
        {
        }

    @Override
    protected void onUnregistered(Context arg0, String arg1)
        {
        }
}

そして私のメニフェストは

 <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.INTERNET" />
<!-- Map Location permissions -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Notification permissions -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" />    

<permission
    android:name="myPackage.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<!-- Storage permissions -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- Internet permissions -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- Call Phone permissions -->
<uses-permission android:name="android.permission.CALL_PHONE" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="cmyPackage.SplashScreen"
        android:label="AppName"
        android:theme="@android:style/Theme.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="myPackage.CatagoriesActivity"
        android:configChanges="keyboardHidden|orientation|keyboard"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
    <activity
        android:name="myPackage.OffersActivity"
        android:configChanges="keyboardHidden|orientation|keyboard"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
    <activity
        android:name="myPackage.SettingsActivity"
        android:configChanges="keyboardHidden|orientation|keyboard"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
    <activity
        android:name="myPackage.OfferDetailsAtivity"
        android:configChanges="keyboardHidden|orientation|keyboard"
        android:theme="@android:style/Theme.NoTitleBar" >
    </activity>
    <activity
        android:name="myPackage.DealInfoActivity"
        android:configChanges="keyboardHidden|orientation|keyboard"
        android:theme="@android:style/Theme.NoTitleBar" >
    </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="myPackage" />
        </intent-filter>
    </receiver>
    <service android:name=".GCMService" />        

    <uses-library android:name="com.google.android.maps" />
</application>    


I/System.out(17369): Registering
D/GCMRegistrar(17369): resetting backoff for packageName
V/GCMRegistrar(17369): Registering app packageName of sendersID xxxxxxxxxxxxxx
registration id     Still Empty
(17369): Not yet registered

アプリケーションに複数のパッケージがあります

public final class CommonUtilities
{
    public static final String SENDER_ID = "xxxxxxxxxxxxx";
    static final String TAG = "AndroidHive GCM";

    public static final String DISPLAY_MESSAGE_ACTION = "myPackage.pushNotifications.DISPLAY_MESSAGE";
    static final String EXTRA_MESSAGE = "message";
    static void displayMessage(Context context, String message)
        {
            Intent intent = new Intent(DISPLAY_MESSAGE_ACTION);
            intent.putExtra(EXTRA_MESSAGE, message);
            context.sendBroadcast(intent);
        }
}
4

3 に答える 3

1

アプリを実行したときに何が起こるかがわかるように、ログ出力を含める必要があります。また、GCMデモを見て、いくつかの重要なコードが欠落しているように見えるため、それをベースとして使用する必要があります:http ://code.google.com/p/gcm/source/browse/samples/gcm-demo- client / src / com / google / android / gcm / demo / app / DemoActivity.java

GCMから登録IDを取得すると、GCMに登録され(登録IDを取得していますか?)、次のステップはサーバーに登録することです。これは、次のIfブロックのelseで発生するはずです。

if (regId.equals(""))

また、GCMサービスにも登録されています。これは、アプリがGCMに正常に登録されたときにトリガーされるコールバックです。GCMへの登録は非同期であるため、登録を試みた直後に登録IDを取得しても何も出力されません。

于 2012-12-24T16:51:14.913 に答える
1

まだ解決されていない場合..これが問題の原因である可能性があると思います...これを追加してください

 <uses-permission android:name="my_app_package.permission.C2D_MESSAGE" />

あなたのAndroidマニフェストxmlに。

それが役に立てば幸い。

于 2012-12-26T07:04:20.883 に答える
0

unique_ID(つまり、12文字)を入力する必要がありますCommonUtilities.java

/**
* Google API project id registered to use GCM.
*/
static final String SENDER_ID = 123456789012; <----
于 2012-12-24T10:45:54.287 に答える